【问题标题】:How do I access Java enums from Scala?如何从 Scala 访问 Java 枚举?
【发布时间】:2011-10-05 22:08:07
【问题描述】:

我的java类如下

public class Test {

    protected enum TestEnum {A, B, C};

    public Test(TestEnum te) {

    }

}

这是我的 Scala

class ScalaEnum(myEnum: TestEnum) extends Test(myEnum) {

}

我收到以下错误消息

无法在对象 Test 中访问对象 Test 中的类 TestEnum 不允许访问受保护类 TestEnum,因为在包 XXX 中封闭类 ScalaEnum 不是定义目标的包 YYY 中的对象 Test 的子类

【问题讨论】:

    标签: scala enums scala-java-interop


    【解决方案1】:

    正如@Alex 和@Jean-Phillipe 所说,这与您尝试访问枚举的事实没有太大关系,更多的是与内部类枚举是隐式静态的事实有关:请参阅@987654321 @,例如。

    这意味着你遇到了this limitation。使用 Scala 2.9.1 将 TestEnum 更改为 public 可以解决我的问题。

    话虽如此,尽管 Martin 强烈反对取消限制,但您的代码在 Scala 2.10 中可以正常工作。

    【讨论】:

      【解决方案2】:

      听起来枚举类是隐式静态的,因为 Scala 称它为“对象测试”。尝试在构造函数中对其进行限定(例如Test.TestEnum),如果这不起作用,则可以放宽对包访问的可见性。

      【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2011-07-09
      • 2012-02-06
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      相关资源
      最近更新 更多