2012-03-25 6 views
3

私はJavaからScala列挙を渡す必要がある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); 

答えて

5

疑わしいときは、生成されたバイトコードを見てください。 :)

$> 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(); 
} 

Ok、easy。これらの列挙はすべてパブリック静的メソッドです。私は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 

これはあなたにもっと多くのアイデアを提供します。 :)

関連する問題