1

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

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

可能吗 ?我看到有一个用于覆盖超类型注释的开放票,这意味着无法覆盖它们,但在这里我想添加注释。

4

1 回答 1

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() 时所示。

此外,AFAIK,如果在变量或 getter 上定义的注释,验证应该是一样的。

就像旁注一样。“覆盖”静态方法会产生与“覆盖”变量相同的(错误)行为,因此也不鼓励使用。

于 2019-09-02T13:49:14.520 回答