Java:获取私有成员的注释

sle*_*ica 2 java annotations

我试图找到所有用自定义注释注释的字段,但它似乎没有检测到它.相同的代码适用于标准注释,例如@Deprecated.

要重现的最小代码:

public class MyClass {

    public @interface MyAnnotation {}

    @MyAnnotation Object someObject;
    @MyAnnotation @Deprecated Object someDeprecatedObject;
    @Deprecated Object aThirdObject;

    public static void main(String[] args) {
        Class<?> cls = MyClass.class;

        for (Field field : cls.getDeclaredFields()) {
            System.out.print(field.getName());

            for (Annotation a : field.getDeclaredAnnotations())
                System.out.print(" " + a);

            System.out.println();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

someObject
someDeprecatedObject @java.lang.Deprecated()
aThirdObject @java.lang.Deprecated()
Run Code Online (Sandbox Code Playgroud)

@Deprecated出现了,但是@MyAnnotation却没有!救命!

Gya*_*uyn 5

默认情况下,注释不会保留在运行时,因此无法反映.您需要声明这样的注释,以确保它在运行时存在:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
Run Code Online (Sandbox Code Playgroud)