gpt4 book ai didi

java - 如果返回值是可变的,为什么要使用 getter 和 setter?

转载 作者:太空狗 更新时间:2023-10-29 22:50:43 25 4
gpt4 key购买 nike

在 C++ 中,私有(private)数据成员的 getter 和 setter 非常有用,因为它能够通过 const 返回值控制可变性。

在 Java 中,如果我理解正确(如果我弄错了请纠正我),在 getter 上指定 final 不会那样工作。一旦调用者通过 getter 接收到数据成员引用,它就可以修改它,尽管它是私有(private)的......

如果是这样(如果我在这里有严重的误解,请纠正我),为什么不声明数据成员 public 并简化事情呢?

最佳答案

在 java 中使 immutable 返回值是或者返回已经immutable 对象类型(比如 String )或者返回一个非不可变对象(immutable对象)的复制


示例 1 - 已经不可变的对象

public String getValue() {
return value;
}

示例 2 - 已经不可变对象(immutable对象)的集合

public List<String> getValues() {
return new ArrayList<String>(values);
}

示例 3 - 非不可变对象(immutable对象)

public Complex getComplex() {
return complex.clone();
}

示例 4 - 非不可变对象(immutable对象)的集合

public List<Complex> getComplex() {
List<Complex> copy = new ArrayList<Complex>(complexs.size());
for (Complex c : complexs)
copy.add(c.clone());
return copy;
}

示例 3 和 4 是为了方便起见,基于复杂类型实现了 Cloneable界面。

此外,为了避免子类覆盖您的不可变方法,您可以将它们声明为 final。作为旁注,builder模式通常用于构造不可变对象(immutable对象)。

关于java - 如果返回值是可变的,为什么要使用 getter 和 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com