Как передать перечисление Scala из Java - PullRequest
3 голосов
/ 25 марта 2012

У меня есть проект на двух языках Scala / Java, в котором мне нужно передать перечисление Scala из Java.

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);

1 Ответ

5 голосов
/ 25 марта 2012

Если есть сомнения, посмотрите на сгенерированный байт-код. :)

$> 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

Надеюсь, это даст вам больше идей для игры. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...