获取派生类中字段的java注释

时间:2012-06-12 22:05:18

标签: java android annotations

在我的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的

2 个答案:

答案 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);