我被告知使用setter来更改对象的属性,并让setter验证属性设置的数据。由于子类覆盖,我也被告知不要在构造函数中使用setter。你应该如何在允许覆盖你的setter的同时验证构造函数的参数?你应该重复验证码吗?
使用setter:
public class A {
private int x;
public A(int x){
setX(x);
}
public void setX(int x) {
if (x > 6)
this.x = x;
else
this.x = 7;
}
}
没有制定者:
public class A {
private int x;
public A(int x){
this.x = x;
}
public void setX(int x) {
if (x > 6)
this.x = x;
else
this.x = 7;
}
}
没有setter和doubled代码:
public class A {
private int x;
public A(int x){
if (x > 6)
this.x = x;
else
this.x = 7;
}
public void setX(int x) {
if (x > 6)
this.x = x;
else
this.x = 7;
}
}
答案 0 :(得分:0)
一个选项是你编写一个在setter和构造函数中使用的私有方法,这样你就不会使代码加倍,子类可以轻松覆盖setter。这是我的方式。
如果您不允许这样做,则必须使用加倍代码。
----编辑:----
这仅适用于长时间检查或者不应设置默认值。
public class A {
private int x;
public A(int x){
if(checkX())
this.x=x;
else
this.x = 7;
}
public void setX(int x) {
if (checkX(x))
this.x = x;
else
this.x = 7;
}
private boolean checkX(int x) {
if (x > 6)
return true;
else
retrun false;
}
}