在 Java 中的注释中定义注释的目的

Purpose of defining an Annotation inside an Annotation in Java

我是一名 Java 开发人员,我在我工作的公司浏览代码库,试图寻找我不熟悉的高级语言语法。我无意中发现了一个约束注释文件夹,它们本身都包含注释定义,如下所示...

@Constraint(validatedBy=MyValidator.class)
@Target(FIELD)
@Retention(RetentionPolicy.RUNTIME)    
@Documented
public @interface FirstAnnotation{ 
    Class<?>[] groups() default{};
    Class<? extends Payload>[] payload() default {};
    String message() default "Default message";

    @Target({FIELD, ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @interface List {
        FirstAnnotation[] value();
    }
}

有人能告诉我这样做的目的以及如何行使吗?我知道它是作为值的 FirstAnnotation 列表,但不确定它的用例是什么以及如何使用 List 注释。我也很好奇是否有人可以阐明为什么需要 groups()、payload() 和 message()?

它是一个静态成员,这意味着您可以使用它:

@FirstAnnotation.List({
    @FirstAnnotation(...),
    @FirstAnnotation(...)
})
private MyType myField;

您可以通过使用 @Repeatable(FirstAnnotation.List.class) 注释 FirstAnnotation 来使这更容易。这样,您就可以省略显式列表:

@FirstAnnotation(...)
@FirstAnnotation(...)
private MyType myField;

这三个字段见https://javaee.github.io/tutorial/bean-validation-advanced001.html and https://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/validator-customconstraints.html