【问题标题】:Scala Enumeration use in javaScala枚举在java中的使用
【发布时间】:2014-02-24 20:53:03
【问题描述】:

我有一个像这样的 scala 枚举。

object WeekDay extends Enumeration {
    type WeekDay = Value
    val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
  }

如何在 Java 中使用该类?

public WeekDay getWeekDay() {
  return WeekDay.withName(this.myWeekDay);
}

它会抛出一个错误:

[error]   required: WeekDay
[error]   found:    Enumeration.Value

【问题讨论】:

    标签: scala playframework-2.2 scala-java-interop


    【解决方案1】:

    正如错误告诉你的那样,Scala 的Enumeration 成员的类型实际上是Value。所以:

    import scala.Enumeration.Value;
    //...
    public Value getWeekDay() {
          return WeekDay.withName(this.myWeekDay);
    }
    

    很遗憾,Scala type aliases are not visible from Java code,所以你不能在这里使用你的WeekDay.WeekDay

    【讨论】:

    • 它不起作用。我在导入语句中收到此错误。类 Enumeration 存在,但它没有伴生对象。
    • @angelokh :对我来说很好用。您遇到的错误是 Scala 的典型错误(Java 没有“伴生对象”的概念),并且确实会在您将导入放在 Scala 代码 中时出现。您在您的 Java 代码中需要此导入(Enumeration 在 Scala 的标准库中,因此是自动导入的)。
    • 谢谢!但我仍然得到错误。 MyInfo.java:15: object Enumeration is not a member of package scala 注意:类 Enumeration 存在,但它没有伴生对象。这是在java代码中。
    • 我的play版本是2.2所以scala版本是2.10.2。
    • @angelokh :还有一件事-出于好奇,我决定自己尝试一下,但遇到了同样的错误。但是,如果您将同时 Java 和 Scala 文件放入一个包(例如blah适当的包文件夹(例如app/blah),编译器正常工作 - 在 Scala 和 Java 项目中。我建议您提出一个新问题,说明为什么会出现这种情况,因为 Play 文档中显然缺少某些内容。
    猜你喜欢
    • 2014-02-27
    • 2016-10-07
    • 1970-01-01
    • 2015-06-08
    • 2015-06-18
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多