我有一个像这样的课程:
class Data<T extends Annotation> {
public Data(T annotation) {
for (Field f : annotation.getClass().getFields()) {
...println(f.getName());
}
}
}
我正在尝试将@interface传递给它。举例来说,假设我的界面如下:
@Retention(..RUNTIME)
@interface foo {
int bar() default 0;
}
这是将带有注释的类:
@foo(bar = 15) // bar is now 15
public class someClass {
public Data<foo> d = new Data<foo>(getClass().getAnnotation(foo.class)); // should pass the 15 along as well
}
问题似乎出在annotation.getClass()。getFields()。它不会返回任何有效字段,然后将不会循环,也不会打印出名称。我是否尝试错误地访问这些字段?我看不到T内的任何其他选项可以让我抓取字段,那么可能出什么问题了?
答案 0 :(得分:1)
我发现我访问错误。似乎@interfaces会将其值视为方法,特别是声明的Methods。因此,除了访问它们之外,我还需要迭代annotation.annotationType().getDeclaredMethods()