Java 何时使用setter,何时使用构造函数设置变量值?

Java 何时使用setter,何时使用构造函数设置变量值?,java,Java,我看到我们可以用setter封装实例变量,然而,构造函数似乎也做同样的事情 Class object1 = new Class(100, 100) // setting using Constructor object1.setValue(100, 100) // setting using Setters 什么时候应该使用setter,什么时候应该使用构造函数来初始化实例变量值?当对象需要值才有意义时,或者为了一致性或方便起见需要同时提供多个值时,使用构造函数;例如,矩形必须具有长度和宽

我看到我们可以用setter封装实例变量,然而,构造函数似乎也做同样的事情

Class object1 = new Class(100, 100) // setting using Constructor

object1.setValue(100, 100)  // setting using Setters

什么时候应该使用setter,什么时候应该使用构造函数来初始化实例变量值?

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

Rectangle r = new Rectangle(10, 20);
当您有可选值(如颜色)或创建对象后可以更改的值时,请提供设置器:

r.setColor(Color.BLUE);
请注意,通常最好尽可能创建不可变的值对象,因为这些对象可以消除几种类型的潜在错误。值对象必须一次全部初始化,尽管它们通常还有返回新的类似对象的方法:

r = r.withLength(15);

构造函数在创建对象的第一个实例时使用。
设置器在您更改该对象的属性时使用。

让我将其与现实场景联系起来

我是XXX公司的开发人员,使用YYY品牌电脑

在Java中,这对应于4个类:YYY类、XXX类、开发者类和计算机类

由于YYY公司生产计算机,所以YYY类必须具有计算机类的构造函数。 由于XXX组织为我配置了要使用的计算机,所以XXX类必须具有类计算机的setter,而不是构造函数。例如setOS,setJava 由于我使用的是这台计算机,类开发人员将使用getter方法,既不是setter也不是构造函数。
我希望这会对你有所帮助。

这里有一个类似的问题:这是一个意见问题;我的建议是:在可能的情况下使用构造函数来减少代码,但我不建议通过setter设置多个值。一种可能的情况是选择一个值而不是另一个值:或者任何其他需要一致性的框架。有一个非常明显的要求:只有构造函数可以初始化一致性状态,也可以处理最终成员,只有setter可以在对象的生命周期内更新状态。这个问题可能太广泛了,但我不认为它主要是基于观点的。例如,有一些特定的内存模型暗示支持不变性。使用构造函数创建对象不是最佳做法吗?谢谢Chrylis!那正是我要找的!