【发布时间】:2021-04-29 13:32:47
【问题描述】:
当实现一个 不可变 类时,该类有一个由Collection 初始化的聚合 给构造函数,构造函数必须制作Collection 的防御性副本,以防止调用者随后改变聚合。
在 Java 10 之前,这将导致如下代码:
class Thing
{
private final List<Widget> widgets;
public Thing(List<Widget> widgets) {
this.widgets = Collections.unmodifiableList(new ArrayList<>(widgets));
}
public List<Widget> getWidgets() {
return widgets;
}
}
Java 10 添加了List.copyOf() 和朋友,它们创建了给定Collection 的不可修改副本。这表明对于 Java 10+,我们可以改为编写如下代码:
class Thing
{
private final List<Widget> widgets;
public Thing(List<Widget> widgets) {
this.widgets = List.copyOf(widgets);
}
public List<Widget> getWidgets() {
return widgets;
}
}
我说的对吗?
【问题讨论】:
标签: java collections copy immutability