我多次遇到类似的代码:
class AClass{
private Iterable<String> list;
public AClass(Iterable<String> list){ this.list = list; }
...
}
在这段代码中,Iterable 的引用直接传递给 AClass。最终结果相当于直接将列表引用暴露给外部。即使您将 AClass.list 设为 final,它仍然允许来自 AClass 外部的代码修改列表的内容,这很糟糕。
为了解决这个问题,我们将在构造函数中进行防御性复制。
但是,这种代码很常见。除了性能考虑之外,人们编写这种代码的意图是什么?