Setter方法或构造函数
到目前为止,我已经看到了两种在Java中设置变量值的方法。 有时使用带参数的构造函数,其他的setter方法用于设置每个变量的值。
我知道一旦使用“new”关键字实例化了一个类,构造函数就会在类中初始化一个实例变量。
但是我们什么时候使用构造函数,什么时候使用setters?
当您想要创建对象的新实例时,您应该使用构造函数方法,并且已经填充了这些值(一个随时可用的对象,其值已填充)。 这样你就不需要明确坐下来调用对象中每个字段的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方法。 我不会说所有的东西都必须在构造函数中初始化,因为存在不同的方法,比如可以用于不可变对象的懒惰评估。
如果你想有一个不可变类使用构造函数,否则使用setter。
假设我们有一个名为Counter的课程:
public class Counter{
int count;
//constructor
public Counter(int c){
count = c;
}
public void setCounter(int newCounter){
count = newCounter;
}
}
在上面的类中,当你想创建一个新的Counter对象时,你可以使用一个构造函数并在其中设置count变量。 像这样:
Counter myCounter = new Counter(1);
如果你想在运行时改变count变量,你可以使用setter方法:
myCounter.setCounter(2);
链接地址: http://www.djcxy.com/p/18007.html
上一篇: Setter methods or constructors
下一篇: Is nesting constructors (or factory methods) good, or should each do all init work