在我的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 {
    ...
}

10-06 15:58