2

HK2 インジェクション フレームワークを使用して、クラス内にカスタム オブジェクトをインジェクトするためのカスタム アノテーションを開発しました。

オブジェクトにクラス変数として注釈を付けると、すべて正常に機能します。

public class MyClass {
    @MyCustomAnnotation
    MyType obj1

    @MyCustomAnnotation
    MyType obj2

     ...

ここで、オブジェクトをコンストラクターパラメーターとして挿入する必要があります。つまり、次のようになります。

public class MyClass {

    MyType obj1        
    MyType obj2

    @MyCustomAnnotation
    public MyClass(MyType obj1, MyType obj2){
        this.obj1 = obj1;
        this.obj2 = obj2;
    }
     ...

私のインジェクションリゾルバーでは、次をオーバーライドしました:

@Override
public boolean isConstructorParameterIndicator() {
    return true;
}

true を返すために。

問題は、プロジェクトをビルドしようとすると、次のエラーが表示されることです。

"The annotation MyCustomAnnotation is disallowed for this location"

私は何が欠けていますか?

4

1 に答える 1

1

注釈定義の問題のように聞こえます。@Target注釈定義の は、注釈が許可される場所を定義します。許可されたターゲットはElementType列挙セットにあります。

ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER_TYPE

コンストラクターをターゲットにできるようにするCONSTRUCTORには、@Target. 複数のターゲットを持つことができます。例えば

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.CONSTRUCTOR})
public @interface MyCustomAnnotation {}

関連項目:

于 2015-11-12T09:42:06.370 に答える