如何使用反射获取 Java 中注释的属性?

How to get attributes of annotations in Java using reflection?

我在 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 returns 为空。这意味着您不需要遍历 attr.getDeclaredAnnotations();

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

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