Java ElementType.CONSTRUCTOR的作用是什么?

Java ElementType.CONSTRUCTOR的作用是什么?,java,annotations,Java,Annotations,我正在学习注释和注释处理器 我遇到了它的声明 @Target(值={方法、字段、注释\类型、构造函数、参数}) @保留期(值=运行时) @记录 @约束(validatedBy={}) 公共@interface NotNull 我对这个注释已经有点熟悉了 @NotNull 公共整数getAge(){ 回归年龄; } @NotNull 私有字符串名称; 私人互联网; 此@NotNull与ElementType.CONSTRUCTOR的用法是什么?ElementType.CONSTRUCTOR声明

我正在学习注释和注释处理器

我遇到了它的声明

@Target(值={方法、字段、注释\类型、构造函数、参数})
@保留期(值=运行时)
@记录
@约束(validatedBy={})
公共@interface NotNull
我对这个注释已经有点熟悉了

@NotNull
公共整数getAge(){
回归年龄;
}
@NotNull
私有字符串名称;
私人互联网;

@NotNull
ElementType.CONSTRUCTOR
的用法是什么?

ElementType.CONSTRUCTOR
声明可以在构造函数级别对注释进行分类(在注释声明中指定
@Target
时)

例如:

@Entity
@Table(name = "Request")
public class Request implements Serializable {

    @NotNull
    public Request() {

    }
}

声明如下(在第2.1章约束注释中):

约束注释可以针对以下任一
ElementType
s:

  • 约束属性的
    字段
  • 方法
    用于受约束的getter
  • 为受约束bean键入
  • 构成其他约束的约束的注释类型
虽然其他
ElementType
s不被禁止,但提供程序不被禁止 必须识别和处理对此类类型的限制。 内置类型确实支持
参数
构造函数
来允许Bean 验证提供程序特定的扩展。这被认为是好的 练习对自定义注释采用相同的方法

本质上,虽然还没有在构造函数级别使用
@NotNull
的构造性/有用的示例,但该规范声明在注释中包含
ElementType
是一种良好的做法(因为内置注释已经包含了它们)


我希望这能有所帮助。

OP似乎知道它可以应用于构造函数,问题是当它应用于构造函数时,它的用途是什么。所以基本上,在构造函数级别上使用
@NotNull
没有任何好处?没有任何东西会被它验证?可能只是因为兼容性?这取决于Bean验证提供程序。请记住,Bean验证是一个API,因此提供者可能决定在构造函数级别验证约束。它根本不需要在构造函数级别识别它。