我有几个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);

如果字段未标注@ColumngetAnnotation将返回null.这意味着不需要迭代attr.getDeclaredAnnotations();

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

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

Java相关问答推荐

try Dockerize Maven应用程序,但发布版本21不支持"

CSS应用于一个端点,但不应用于Thymeleaf中的另一个端点

CAMEL 4中的SAXParseException

RESTful框架类字段是安全的还是不安全的

使用Mockito进行的Junit测试失败

Bean定义不是从Spring ApplationConext.xml文件加载的

无法使用Java&;TestContainers获取AWS SQS队列的属性

为什么Spring Boot项目无法为基于MySQL的CRUD应用程序找到从JPARepository接口扩展的ProductRepository?

SpringBoot Kafka自动配置-适用于SASL_PLAYTEXT的SSLBundle 包,带SCRAM-SHA-512

Javadoc在方法摘要中省略方法

Docker不支持弹性APM服务器

Java中不兼容的泛型类型

try 使用类来包含JSON响应

我如何为我的Java抵押贷款代码执行加薪操作(&Q)

寻找Thread.sky()方法的清晰度

嘲笑黄瓜中的对象

如何使用jooq更新记录?

如何使用jOOQ在PostgreSQL中从枚举类型生成Java枚举

如何在Selenium上继续使用最新的WebDriver版本

升级版本后出现非法访问错误