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,因此提供者可能决定在构造函数级别验证约束。它根本不需要在构造函数级别识别它。