[英]How to pass Scala enumeration from Java
我有一個Scala / Java雙語項目,我需要從Java傳遞Scala枚舉。
object MonthSelection extends Enumeration {
type MonthSelection = Value
val LastMonth, ThisMonth, NextMonth, CustomMonth = Value
}
class MyClass {
def doDateStuff(monthChosen: MonthSelection) = {
// do stuff
}
}
我如何用Java調用它? 我收到編譯錯誤,因為我似乎無法導入scala.Enumeration.Value。
MyClass myClass = new MyClass();
myClass.doStuff(MonthSelection.ThisMonth);
如有疑問,請查看生成的字節碼。 :)
$> cat foo.scala
object MonthSelection extends Enumeration {
type MonthSelection = Value
val LastMonth, ThisMonth, NextMonth, CustomMonth = Value
}
$> scalac -d bin foo.scala
$> ls bin
MonthSelection$.class MonthSelection.class
$> javap bin/MonthSelection
Compiled from "foo.scala"
public final class MonthSelection extends java.lang.Object{
public static final scala.Enumeration$Value CustomMonth();
public static final scala.Enumeration$Value NextMonth();
public static final scala.Enumeration$Value ThisMonth();
public static final scala.Enumeration$Value LastMonth();
public static final scala.Enumeration$ValueSet$ ValueSet();
public static final scala.Enumeration$Value withName(java.lang.String);
public static final scala.Enumeration$Value apply(int);
public static final int maxId();
public static final scala.Enumeration$ValueSet values();
public static final java.lang.String toString();
}
好的,容易的。 所有這些枚舉都是公共靜態方法。 我只需要導入scala.Enumeration並直接調用這些方法。
$> cat Some.java
import scala.Enumeration;
public class Some {
public static void main(String args[]) {
System.out.println("Hello!");
System.out.println(MonthSelection.CustomMonth());
}
}
$> javac -cp $SCALA_HOME/lib/scala-library.jar:bin/ -d bin Some.java
$> ls bin
MonthSelection$.class MonthSelection.class Some.class
$> java -cp $SCALA_HOME/lib/scala-library.jar:bin Some
Hello!
CustomMonth
希望這會給你更多的想法。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.