3

オブジェクトに内部クラスを挿入できるかどうかは誰にもわかりませんか? 私はそのようなものを書きたい:

@Named
public class ClassA {

    @Inject
    private InnerClass myObject;

    public class InnerClass extends DefaultImplementation implements Serializable{
        public String overriddenMethod() {
            // do something special
        }
    }
}

ユース ケースの 80% でインジェクションに使用するデフォルトの実装があるため、これらの奇妙なことを実行したいと考えています。しかし、特別なロジックについては、デフォルトの実装でいくつかのメソッドをオーバーライドする必要があります。

2 行のコードだけをオーバーライドしたいので、余分なクラス ファイルを作成したくありません。

OpenWebBeans-Contrainer でコードを試すと、次のエラーが発生します。

javax.enterprise.inject.UnsatisfiedResolutionException: Api タイプ [ClassA$InnerClass] が修飾子で見つかりません 修飾子: フィールドへの注入のための [@javax.enterprise.inject.Default()]: プライベート ClassA$InnerClass ClassA.myObject

4

2 に答える 2

2

「public static」として宣言されている場合、内部クラスの注入が機能するはずです

于 2012-05-22T07:22:08.670 に答える
1

問題を解決するには、クラスを次のように変更するだけです

public static class InnerClass //...

少し直感的ではないように思えるかもしれませんが、Java の静的クラスは c# のような言語とは大きく異なります。Java では、最初に外部クラスのインスタンスを作成する必要なく、ネストされたクラスを利用したい状況でのみ静的クラスが使用されます。ネストされたクラスではない静的クラスを作成することは、Java では実際には無効です。

詳細については、この回答を参照してください: Java でクラスを静的として宣言できないのはなぜですか?

于 2012-11-21T16:01:55.323 に答える