在课堂上,我有几个字段是匿名类。其中一些有注释。例如:
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
}
我猜这是不可能的,如果没有,那么接近我正在做的事情的最佳方法是什么?
答案 0 :(得分: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
。
答案 1 :(得分:1)
我猜Test
是一个接口,你想要实现类的注释。
for (Test test : c) {
test.getClass().getField( "xx" ).getAnnotations()
}
原因是您可以使用test.getClass().getFiels()
获取所有字段,然后从中获取注释。取决于你真正想要做的事情。