何时使用Setter,何时使用Constructors设置变量值?

时间:2016-09-09 21:35:30

标签: java

我看到我们可以使用setter封装实例变量,但是,Constructors似乎做了同样的事情。

String cmd = "am start -n " + getApplicationContext().getPackageName() + "/." + getActivity().getClass().getSimpleName();
...
os.writeBytes("pm install -r " + filename + " && " + cmd);
...

我应该何时使用setter,何时应该使用Constructors来初始化实例变量值?

3 个答案:

答案 0 :(得分:3)

当值为 required 时,使用构造函数使对象有意义,或者为了一致性或方便性,需要一次提供多个值时使用构造函数;例如,Rectangle 必须具有长度和宽度。

Rectangle r = new Rectangle(10, 20);

当您有可选值(例如颜色)或在创建对象后可以更改的值时提供setter:

r.setColor(Color.BLUE);

请注意,通常最好尽可能创建不可变的“值对象”,因为这样可以消除几种类型的潜在错误。必须一次初始化值对象,尽管它们通常也有返回新的类似对象的方法:

r = r.withLength(15);

答案 1 :(得分:0)

在创建对象的第一个实例时使用构造函数。 当您更改该对象的属性时,将使用Setter。

答案 2 :(得分:0)

让我把它与现实生活场景联系起来。

我是XXX组织的开发人员,使用YYY品牌电脑。

在Java中,这对应于4个类,类YYY,类XXX,类Developer,类Computer。

  • 由于YYY公司生产计算机 - 所以YYY类必须有类计算机的构造函数。
  • 由于组织XXX配置计算机供我使用,因此类XXX必须具有类Computer(而不是构造函数)的setter。例如setOS(),setJava()
  • 由于我使用的是计算机,因此Developer类将使用getter方法,既不是setter也不是构造函数。

我希望这会对你有所帮助。