8

私のJavaクラスは次のとおりです

public class Test {

    protected enum TestEnum {A, B, C};

    public Test(TestEnum te) {

    }

}

ここに私のScalaがあります

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

}

次のエラー メッセージが表示されます

オブジェクト Test 内のクラス TestEnum はオブジェクト Test 内でアクセスできません 保護されたクラス TestEnum へのアクセスは許可されません パッケージ XXX 内のクラス ScalaEnum を囲んでいるクラスは、ターゲットが定義されているパッケージ YYY 内のオブジェクト Test のサブクラスではないためです

4

2 に答える 2

2

@Alex と @Jean-Phillipe が言ったように、これは列挙型にアクセスしようとしているという事実とはあまり関係がなく、内部クラスの列挙型が暗黙的に静的であるという事実とは関係ありません。たとえば、この回答を参照してください。 .

これは、この制限に直面していることを意味します。パブリックに変更TestEnumすると、Scala 2.9.1 で問題が回避されます。

とはいえ、Martin は制限を取り除くことに激しく反対していますが、あなたのコードは Scala 2.10 で期待どおりに動作します。

于 2012-05-24T10:29:43.277 に答える
0

Scala がそれを「オブジェクト Test」と呼んでいるため、enum クラスは暗黙的に静的であるように思えます。コンストラクターでそれを修飾してみてください (例: Test.TestEnum)。それがうまくいかない場合は、パッケージ アクセスへの可視性を緩和してください。

于 2011-07-15T07:21:13.607 に答える