Java:获取私有成员的注释

发布于 2025-01-07 23:17:02 字数 834 浏览 0 评论 0原文

我试图找到所有用自定义注释注释的字段,但它似乎没有检测到它。相同的代码适用于标准注释,例如@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();
        }
    }
}

输出:

someObject
someDeprecatedObject @java.lang.Deprecated()
aThirdObject @java.lang.Deprecated()

@Deprecated 出现,但 @MyAnnotation 没有!帮助!

I'm trying to find all fields annotated with a custom annotation, but it doesn't seem to detect it. The same code works fine for standard annotations, such as @Deprecated.

Minimal code to reproduce:

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();
        }
    }
}

Output:

someObject
someDeprecatedObject @java.lang.Deprecated()
aThirdObject @java.lang.Deprecated()

@Deprecated comes up, but @MyAnnotation doesn't! Help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

淤浪 2025-01-14 23:17:02

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

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}

By default, annotations are not kept at runtime and so cannot be reflected upon. You need to declare your annotation like this to ensure it exists at runtime:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文