直接获取字段的注释

时间:2013-09-27 18:38:14

标签: java reflection annotations

在课堂上,我有几个字段是匿名类。其中一些有注释。例如:

public class MainClass {

    @Annotation
    public static Test t = new Test() {...}

    Interface Test {...}

}

我知道我可以通过执行MainClass.class.getField(“t”)。getAnnotations()来查看t的注释,但有没有办法通过引用t来获取t的注释?例如,如果我有一组测试,我可以通过迭代来查看它们的注释吗?

Collection<Test> c;
...
// MainClass.t is in collection c
...

for (Test test : c) {

    // get annotation of test

}

我猜这是不可能的,如果没有,那么接近我正在做的事情的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

引用只指向一个对象,而一个对象没有任何注释。字段(方法,类,参数等)可以。所以,不,这是不可能的。

  

接近我正在做的事情的最佳方式是什么?

没有。

public void someMethod() {
    Test test = MainClass.t;
    // some more
}

MainClass.tField。局部变量test就是一个局部变量。

请注意,您可以注释局部变量

public void someMethod() {
    @SomeAnnotation
    Test test;
}

@Target(value = { ElementType.LOCAL_VARIABLE })
public @interface SomeAnnotation {

}

但是无法检索该注释。它主要由IDE使用,例如@SuppressWarnings

答案 1 :(得分:1)

我猜Test是一个接口,你想要实现类的注释。

for (Test test : c) {

    test.getClass().getField( "xx" ).getAnnotations()

}

原因是您可以使用test.getClass().getFiels()获取所有字段,然后从中获取注释。取决于你真正想要做的事情。