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