2011-07-15 6 views
8

ここScalaからJava enumをアクセスするにはどうすればよいですか?

public class Test { 

    protected enum TestEnum {A, B, C}; 

    public Test(TestEnum te) { 

    } 

} 

は、私は、オブジェクトのテストに次のエラーメッセージ

クラスTestEnumが保護する対象のテストアクセスでアクセスすることができません受け取る私のScalaの

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

} 

で次のように私のJavaクラスがありますクラスTestEnumはクラスYを囲むクラスクラスScaringEnumがパッケージYYY内のオブジェクトTestのサブクラスではないため、ターゲットが定義されているため許可されていません

答えて

2

とジャン=フィリップは、これはあなたが内部クラスの列挙型が暗黙的に静的であるという事実に関係する列挙型などにアクセスしようとしているという事実とはあまりしていない、と述べた@:参照this answer 、 例えば。

これは、あなたがthis limitationと競合していることを意味します。 TestEnumをScala 2.9.1で私の問題の周りに公開するように変更してください。

これまで述べてきたように、制限を取り除くことに対するMartinの反論にもかかわらず、あなたのコードはScala 2.10では期待通りに動作します。

0

enumクラスが暗黙的に静的であるように聞こえるのは、Scalaが「オブジェクトテスト」と呼んでいるからです。コンストラクタで適格性確認(例:Test.TestEnum)しても問題が解決しない場合は、パッケージアクセスの可視性を緩和する可能性があります。

@Alexとして
+2

正確に。 [保護された静的内部クラスとの相互運用性には制限があります](http://www.scala-lang.org/node/1381)。 –

+0

私はpublicに変更するとまだエラーが表示されます – deltanovember

+0

OK、名前を入力するとどうなりますか? :) –

関連する問題