将@interface传递给'data'类,然后显示字段'getName()'

时间:2018-11-26 21:32:57

标签: java generics interface

我有一个像这样的课程:

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内的任何其他选项可以让我抓取字段,那么可能出什么问题了?

1 个答案:

答案 0 :(得分:1)

我发现我访问错误。似乎@interfaces会将其值视为方法,特别是声明的Methods。因此,除了访问它们之外,我还需要迭代annotation.annotationType().getDeclaredMethods()