这个嵌套注释做什么/允许什么?

我正在查看@org.hibernate.validator.constaints.NotEmpty注释:

 @Documented @Constraint(validatedBy = { }) @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) @ReportAsSingleViolation @NotNull @Size(min = 1) public @interface NotEmpty { String message() default "{org.hibernate.validator.constraints.NotEmpty.message}"; Class[] groups() default { }; Class[] payload() default { }; /** * Defines several {@code @NotEmpty} annotations on the same element. */ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) @Documented public @interface List { NotEmpty[] value(); } } 

我对最后一部分感到困惑:

  /** * Defines several {@code @NotEmpty} annotations on the same element. */ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) @Documented public @interface List { NotEmpty[] value(); } 

我不确定它是如何工作的,也不确定如何使用它。 根据我的理解,Java 8下的任何内容都不允许在同一元素上重复注释。

任何人都可以澄清吗?

NotEmpty.List存在的原因是,对于同一元素不能重复相同的注释这一事实。 在NotEmpty.List的帮助下,多个NotEmpty注释有效地应用于一个元素。 注释处理检查NotEmpty.List的值NotEmpty注释列表。

在NotEmpty的情况下,使用List of validators的一个原因可能是使用组并为每个组分配不同的消息。

为了举例,我们采取可以代表公司或个人的实体。 在这两种情况下,name不应为null,但消息不同:

 @NotEmpty.List({ @NotEmpty( message = "Person name should not be empty", groups=PersonValidations.class), @NotEmpty( message = "Company name should not be empty", groups=CompanyValidations.class), }) private String name;