如何从Scala访问Java枚举?

时间:2011-07-15 06:41:18

标签: scala enums scala-java-interop

我的java类如下

public class Test {

    protected enum TestEnum {A, B, C};

    public Test(TestEnum te) {

    }

}

这是我的Scala

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

}

我收到以下错误消息

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

2 个答案:

答案 0 :(得分:2)

正如@Alex和@ Jean-Phillipe所说,这与你试图访问枚举的事实没什么关系,更多的是与内部类枚举是隐式静态这一事实有关:参见{{ 3}},例如。

这意味着你正在对抗this answer。使用Scala 2.9.1将TestEnum更改为公开可以解决问题。

尽管如此,尽管Martin强烈反对删除限制,但您的代码与Scala 2.10一样正常工作。

答案 1 :(得分:0)

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