是否可以将javax.validation批注添加到以超类型声明的属性中?

时间:2019-09-02 12:42:14

标签: java validation javax.validation

我想用属性的标准化名称定义一个抽象属性类。这样,所有继承的属性都将使用相同的名称模式声明属性。

在子类上,我希望能够在其中某些属性上添加javax.validation.notNull注释。

有可能吗? 我看到有an open ticket用于覆盖超类型注释,这意味着无法覆盖它们,但是在这里我想添加注释。

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。您只需要重写超类中的方法,并在子类中添加所需的注释即可。

回答您的评论

编辑1:

是的,我的意思是覆盖吸气剂。我会强烈推荐反对 在父类和子类中定义相同的变量。我认为访问父类中定义的变量会违反封装。除此之外,您可能会遇到各种麻烦,因为这些变量实际上被覆盖。考虑下面的基类

public class Base {
    public int ggg;

    public void test() {
        System.out.println("Base test was called");
    }
}

和儿童班

public class Child extends Base {
    public int ggg;

    public void test() {
        System.out.println("Child test was called");
    }

}

在以下测试类中运行main()

public class Test {
    public static void main(String[] args) {
        Base base = new Child();
        base.ggg = 5;
        System.out.println(base.ggg);
        System.out.println(((Child) base).ggg);
        base.test();
        ((Child) base).test();
    }
}

您将获得以下输出

  

5
  0
  子测验被称为
  子测验被称为

变量ggg存在两次,一次在子类中,一次在超类中。根据访问对象的方式,可以访问其中之一。如调用test()所示,使用适当重写的方法不会发生这种情况。

此外,如果在变量或getter上定义的注释,则AFAIK的验证也应相同。

请注意。 “覆盖”静态方法产生与“覆盖”变量相同的(错误)行为,因此不建议使用。