在构造函数中使用setter方法:不好的做法?

17 java

我经常看到像这样的构造函数

public class A {

   private int b;

   public A(int b) {
      setB(b);
   }

   public void setB(int b) {
      this.b = b;
   }
}
Run Code Online (Sandbox Code Playgroud)

这是一个好主意吗?我应该在构造函数中使用setter方法吗?如果我要覆盖子类中的构造函数或setter方法,这不是问题吗?

Pie*_*ter 31

这可能不是一个好主意.如果你没有让那个类成为final,并且不使setName(...)方法成为私有或最终的,那么其他人就可以扩展你的类并覆盖setName(...)方法.您的构造函数(在您的基类中)将在扩展类而不是您的实现中调用该方法.没有人知道该方法可以做什么.根据经验:构造函数不应该调用可以覆盖的方法.

  • 不仅如此:在`setName()`的调用中,尚未调用子类构造函数,因此最终变量可以是未初始化的,等等. (7认同)