java - Java中如何使用反射获取注解的属性?

标签 java reflection annotations

我想知道 java 中的几个数据类 - 使用反射 - 哪些字段具有带有特定属性的特定注释,如下所示:

@Column(columnDefinition = "text") // Text with unbound length
private String comment;

我想出了如何获取字段的注释以及它是否是Column类型:

private boolean isStringFieldWithBoundLength(Field attr) {
    Annotation[] annotations = attr.getDeclaredAnnotations();
    for (Annotation ann : annotations) {
        Class<? extends Annotation> aClass = ann.annotationType();
        if (Column.class == aClass) {
            
            // ...
            
        }
    }
}

现在在调试器中我可以看到 aClass 对象具有有关所提供参数的信息。不幸的是我不知道如何用代码访问它。是否可以在java中访问这些信息?

最佳答案

您应该能够使用

获取该注释的实例(包括您的值)
Column fieldAnnotation = attr.getAnnotation(Column.class);

如果该字段未使用 @Column 进行注释,则 getAnnotation 返回 null。这意味着您不需要迭代 attr.getDeclaredAnnotations();

然后,您可以调用 fieldAnnotation.columnDefinition() 或注释可能具有的任何自定义字段。

补充:您的注释需要有 @Retention(RetentionPolicy.RUNTIME) 才能正常工作,否则您的注释将在编译期间从类/字段/方法中删除。

关于java - Java中如何使用反射获取注解的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72301279/

相关文章:

java - C++ (Visual Studio) 有 Java 风格的注释吗?

java - 多域环境下spring-security添加多个ldap源

java - 接口(interface)方法的@Override导致JSP编译失败

ios - 快速将自定义注释图钉图像更新为标准注释图钉

java - 从 DB 推送到 Java 客户端的数据异步连续轮询

java - 我可以在 init 之外的代码中添加文本字段吗?

vba - 从字符串中动态选择类

ios - 有没有办法让 NSInvocation 支持变量 parmas 函数行 [NSstring stringWithFormat :. .]

.net - 获取在其上声明的属性内的属性名称

servlets - Tomcat 7 的 @WebServlet 注释