在我的android应用程序中,我有以下类:
public abstract class A implements IA {
private void findAnnotations() {
Field[] fields = getClass().getFields();
// Get all fields of the object annotated for serialization
if (fields != null && fields.length > 0) {
for (Field f : fields) {
Annotation[] a = f.getAnnotations();
if (annotation != null) {
// Do something
}
}
}
return serializationInfoList
.toArray(new SoapSerializationFieldInfo[serializationInfoList
.size()]);
}
}
和
public abstract class B extends A {
@MyAnnotation(Name="fieldDelaredInB")
public long fieldDelaredInB;
}
当我调用
B.findAnnotations()
时,我可以看到getClass().getFields()
返回在b-fieldDelaredInB
中声明的字段,例如,但不返回这些字段的注释-即,当我调用f.getAnnotations()
,f.getDeclaredAnnotations()
或其他任何类型时,我将获得空值。这是一个不熟悉派生类属性的超类的问题吗?考虑到当我从超类调用
getFields()
时派生类的字段确实会出现,这看起来很奇怪。你知道我遗漏了什么吗?
谢谢,
哈雷尔
最佳答案
除非使用@Retention(RetentionPolicy.RUNTIME)
将批注标记为运行时保留,否则不会在运行时加载批注。必须将此@Retention
批注放在@MyAnnotation
批注上:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
...
}