簡體   English   中英

如何從Java傳遞Scala枚舉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM