13

Searchable.java

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Searchable { }

Obj.java

public class Obj {
    @Searchable
    String myField;
}

void main(文字列[]引数)

Annotation[] annotations = Obj.class.getDeclaredField("myField").getAnnotations();

annotations@Searchable. ですがnull。ドキュメントによると、この方法は次のとおりです。

この要素に存在するすべての注釈を返します。(この要素に注釈がない場合、長さゼロの配列を返します。) このメソッドの呼び出し元は、返された配列を自由に変更できます。他の呼び出し元に返される配列には影響しません。

nullの代わりに返されるため、これは(私にとって)さらに奇妙ですAnnotation[0]

ここで何が間違っているのか、さらに重要なのは、どうすれば を取得できるのAnnotationでしょうか?

4

4 に答える 4

7

私はあなたのためにこれをテストしました、そしてそれはうまくいきます:

public class StackOverflowTest {

    @Test
    public void testName() throws Exception {

        Annotation[] annotations = Obj.class.getDeclaredField("myField").getAnnotations();

        System.out.println(annotations[0]);
    }
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Searchable {

}

class Obj {

    @Searchable
    String myField;
}

実行したところ、次の出力が生成されます。

@nl.jworks.stackoverflow.Searchable()

上記のクラスを IDE で実行してみてください。IntelliJ、openjdk-6で試してみました。

于 2013-05-03T14:02:48.827 に答える