0

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

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

}

我猜这是不可能的,如果不是,那么接近我想要做的最好的方法是什么?

4

2 回答 2

1

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

接近我想要做的事情的最佳方式是什么?

空无一人。

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

MainClass.t是一个Field。局部变量test就是这样,一个局部变量。

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

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

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

}

但没有办法检索该注释。它主要由 IDE 使用,例如@SuppressWarnings.

于 2013-09-27T18:39:37.990 回答
1

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

for (Test test : c) {

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

}

当然,您可以使用test.getClass().getFiels()获取所有字段,然后从中获取注释。完全取决于你真正想要做什么。

于 2013-09-27T18:43:40.980 回答