我正在学习注释和注释处理器。
我遇到了javax.validation.constraints.NotNull声明
@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
@Retention(value=RUNTIME)
@Documented
@Constraint(validatedBy={})
public @interface NotNull
我已经对这个注释有点熟悉了。
@NotNull
public Integer getAge() {
return age;
}
@NotNull
private String name;
private int age;
此@NotNull
与ElementType.CONSTRUCTOR
的哪种用法?
答案 0 :(得分:2)
ElementType.CONSTRUCTOR
声明注释可以在构造函数级别上进行分类(在注释声明中指定@Target
时)。
示例:
@Entity
@Table(name = "Request")
public class Request implements Serializable {
@NotNull
public Request() {
}
}
Beans Validation Specification (1.0 final)表示以下内容(在 2.1约束注释一章中):
约束注释可以针对以下
ElementType
中的任何一个:
FIELD
用于约束属性- 对于受限制的bean,
METHOD
用于约束的getterTYPE
ANNOTATION_TYPE
用于构成其他约束的约束。虽然不禁止其他
ElementType
,但提供商不会 必须识别和处理对这些类型的约束。 内置类型支持PARAMETER
和CONSTRUCTOR
以允许Bean 验证提供程序特定扩展。它被认为是好的 练习按照相同的方法进行自定义注释。
实质上,虽然在构造函数级别上没有使用{em>建设性/有用的示例,但规范声明包含@NotNull
是一种好习惯。 on annotations(因为内置注释已包含它们)。
我希望这会有所帮助。