例:
private int x = 4;
public TestClass(int x) {
this.x = x;
}
public TestClass(int x) {
setX(x);
}
public void setX(int x) {
this.x = x;
}
第一个构造函数是更好的练习还是第二个?我问这个是因为当我在IntelliJ IDEA中封装我的类时,如果我之前使用过.x = x,则将其更改为setX(int newX);.
最佳答案 在大多数情况下,这都是个人喜好.如果它的值不依赖于其他变量,我会使用第一个构造函数.但是,setter方法允许在修改变量值之前满足某些条件.例如:
private int x;
public TestClass(int x) {
setX(x);
}
public void setX(int x) {
// Some random condition depending on other variables.
if (System.currentTimeMillis() & 1 == 0) {
this.x = 5;
} else {
this.x = x;
}
}
如果有许多条件无法通过三元语句轻易表示,那么使用setter方法是有意义的.
如果类是抽象的,那么扩展它的具体类可能会覆盖setter方法,从而修改变量的值.如果您打算使用自封装并且不希望任何子类覆盖setter方法,只需将final关键字添加到方法声明中.