如何从Scala访问Java枚举?

del*_*ber 8 enums scala scala-java-interop

我的java类如下

public class Test {

    protected enum TestEnum {A, B, C};

    public Test(TestEnum te) {

    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的Scala

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

}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息

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

rxg*_*rxg 2

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

这意味着您正在遇到此限制。使用 Scala 2.9.1将其更改TestEnum为公共工程,解决了我的问题。

话虽如此,尽管 Martin 强烈反对消除该限制,但您的代码在 Scala 2.10 中仍能按预期工作。