到目前为止,我已经看到了两种在Java中设置变量值的方法。有时使用带有参数的构造函数,而其他setter方法则用于设置每个变量的值。
我知道,一旦使用“新”关键字实例化了一个类,构造函数就会在类内部初始化一个实例变量。
但是,什么时候使用构造函数,何时使用setter?
当您要创建对象的新实例时,应使用构造函数方法,该实例的值已填充(准备使用的对象中已填充值)。这样,您无需为对象中的每个字段显式调用setter方法即可填充它们。
创建对象后,要更改字段的值时,可以使用setter方法设置值。
例如:-
MyObject obj1 = new MyObject("setSomeStringInMyObject"); // Constructor approach // Yippy, I can just use my obj1, as the values are already populated // But even after this I can change the value obj1.setSomeString("IWantANewValue"); // Value changed using setter, if required. .. MyObject obj2 = new MyObject(); obj2.setSomeString("setSomeStringNow"); // Setter approach // values weren't populated - I had to do that. Sad :(
正如Axel所述, 如果要创建不可变的对象,则不能使用setter-methods方法。 我不会说一切都必须在构造函数中初始化,因为存在不同的方法,例如即使对于不可变的对象也可以使用的惰性求值。