2011-07-15 89 views
8

我的Java類是如下如何從Scala訪問Java枚舉?

public class Test { 

    protected enum TestEnum {A, B, C}; 

    public Test(TestEnum te) { 

    } 

} 

這裏是我的斯卡拉

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

} 

我收到以下錯誤消息在對象測試

類TestEnum不能在對象測試Access訪問受保護class TestEnum不允許,因爲在包XXX中封裝類類ScalaEnum不是對象的子類在包YYY中定義目標的測試

回答

2

正如@Alex和@ Jean-Phillipe所說,這與您嘗試訪問枚舉以及更多地處理內部類枚舉隱式靜態的事實無關:請參見this answer , 例如。

這意味着你正在運行對this limitation。改變TestEnum作爲公共工程圍繞Scala 2.9.1的問題。儘管Martin強烈反對取消限制,但您的代碼在Scala 2.10中按預期工作。

0

這聽起來像枚舉類是隱式靜態的,因爲斯卡拉稱它爲「對象測試」。嘗試在構造函數中對其進行限定(例如Test.TestEnum),如果這不起作用,則可以放寬包訪問的可見性。

+2

沒錯。 [與受保護的靜態內部類的互操作性受到限制](http://www.scala-lang.org/node/1381)。 –

+0

如果我更改爲公開,我仍然收到錯誤 – deltanovember

+0

好的,如果您符合該名稱,那麼該怎麼辦? :) –