使用 immutable(不可变)对象,本质上是为了降低复杂度、提升可靠性和并发安全性。下面从几个关键角度说明“为什么要用 immutable 对象”。
不可变对象一旦创建就不能被修改,因此:
final class Point {
final int x;
final int y;
Point(int x, int y) { this.x = x; this.y = y; }
}
多个线程同时读 Point,永远不会出问题。
可变对象容易被“意外修改”:
user.setName("Tom");
// 别的地方也在用 user,结果行为变了
不可变对象强制你显式创建新对象,逻辑更清晰:
User updated = user.withName("Tom");
代码更容易理解和推理。
不可变对象:
Map<Point, String> map = new HashMap<>();
如果 Point 可变,key 一变就找不到值了。
函数式编程强调:
不可变对象是函数式编程的核心:
list.stream()
.map(x -> x + 1)
.collect(toList());
不会修改原 list。
返回不可变对象,可以防止外部修改内部状态:
public List<String> getNames() {
return Collections.unmodifiableList(names);
}
避免“防御性拷贝”满天飞。
这时可以:
Immutable 对象用“不能改”来换“不用怕”
怕并发、怕副作用、怕状态混乱时,它是最省心的选择。
如果你愿意,我也可以结合 Java / Kotlin / Scala / JS 具体语言举例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。