【发布时间】:2015-06-10 21:43:02
【问题描述】:
考虑一下
public class Data {
private final SomeField[] fields;
.....
public SomeField[] getFields() {
return map == null ? null : map.clone();
}
安全性 - 方法返回内部数组
直接暴露内部数组允许用户修改一些代码 这可能很关键。返回数组的副本更安全。
我知道我们不应该使用clone() 来复制对象,而应该使用copy constructor 来复制对象。
但这仍然会复制作为引用的内部对象。
避免上述clone() 的推荐方法是什么?
谢谢
【问题讨论】:
-
正如我在
Effective java中所读到的,我们应该使用Copy Constructor或copy static factory method而不是clone()。我们应该需要创建所有对象并从旧对象分配值。
标签: java arrays sonarqube clone