在我的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
,例如,但是没有返回这些字段的注释 - 即,我得到null当我拨打f.getAnnotations()
,f.getDeclaredAnnotations()
或任何时候。
这是一个不熟悉派生类属性的超类问题吗?看起来很奇怪,考虑到当我从超类中调用getFields()
时派生类DO的字段出现。
我缺少什么想法?
谢谢, Harel的
答案 0 :(得分:6)
除非使用@Retention(RetentionPolicy.RUNTIME)
标记运行时保留,否则不会在运行时加载注释。您必须在@Retention
注释中添加@MyAnnotation
注释:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
...
}
答案 1 :(得分:2)
相反
if (annotation != null) {
// Do something
}
你应该
if (a != null) {
//do something
}
此外,如果您搜索所需的注释会更快,例如:
Annotation a = f.getAnnotation(MyAnnotation.class);