4

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

我遇到了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

4

1 回答 1

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对于受约束的属性
  • METHOD对于受限吸气剂
  • TYPE对于受限豆
  • ANNOTATION_TYPE用于构成其他约束的约束。

虽然不禁止其他ElementTypes,但提供者不必识别和处理对此类类型施加的约束。内置类型确实支持PARAMETERCONSTRUCTOR允许 Bean Validation 提供程序特定的扩展。对自定义注释遵循相同的方法被认为是一种很好的做法。

从本质上讲,虽然没有在构造函数级别上使用的建设性/有用的示例@NotNull,但规范声明包含ElementTypeon 注释是一种很好的做法(因为内置注释已经包含它们)。

我希望这有帮助。

于 2013-05-07T07:37:14.537 回答