在构造函数中使用setter方法:糟糕的做法?
我经常看到像这样的构造函数
public class A { private int b; public A(int b) { setB(b); } public void setB(int b) { this.b = b; } }
这是一个好主意吗? 我应该在构造函数中使用setter方法吗? 如果我要覆盖子类中的构造函数或setter方法,这不是问题吗?
这可能不是一个好主意。 如果你没有使该类成为final,并且不使setName(…)方法成为私有或最终的,那么其他人就可以扩展你的类并覆盖setName(…)方法。 您的构造函数(在您的基类中)将在扩展类而不是您的实现中调用该方法。 没有人知道该方法可以做什么。 根据经验:构造函数不应该调用可以覆盖的方法。
我认为你应该仔细选择并注意每个方面的缺点。
如果您定义的类可能是子类,那么请特别注意避免在子类需要您完成时未初始化。
这可能是一个有用的机制,但在我看来,这是令人不愉快的。
public class A { private int b; public A(int b) { _setB(b); } private void _setB(int b) { this.b = b; } public void setB(int b) { _setB(b); } }
我个人更喜欢这样的事情:
public class A { private int b; public A(int b) { this.b = b; } public void setB(int b) { this.b = b; } }