【发布时间】:2011-11-03 17:46:33
【问题描述】:
我创建了一个继承的字段类型注释,它放置在抽象超类的私有属性上。
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Lifecycle{
Type type();
String name() default "";
public enum Type{
DISCRIMINATOR,INITIAL,MUTABLE
}
}
我正在从子类中调用一个方法,该方法旨在收集该类型的所有注释(继承的或其他的)并将它们返回到一个列表中。
public static <T extends Annotation> List<T> getAnnotation(final Class c, final Class<T> ann) {
return getAnnotation(c, ann, new ArrayList<T>());
}
public static <T extends Annotation> List<T> getAnnotation(final Class c, final Class<T> ann, List<T> aList) {
Field[] fields = c.getFields();
for (int i = 0; i < fields.length; i++) {
Field myField = fields[i];
myField.setAccessible(true);
T found = myField.getAnnotation(ann);
if (found != null) {
aList.add(found);
}
}
if (!c.getSuperclass().equals(Object.class)) {
return getAnnotation(c.getSuperclass(), ann, aList);
} else {
return aList;
}
}
出于某种我不知道的原因,这不起作用。肯定找到所有继承的和未继承的字段。同样遍历继承结构中的所有类,但由于某种原因,myField.getAnnotation(ann); 始终为空。
我有点不知所措 - 我不明白为什么如果我可以正确检索我看不到它的注释的字段(以及获取和设置它的值,例如不是安全的东西)。
【问题讨论】:
标签: java inheritance annotations