返回“数据”可能会暴露内部arrays?

考虑一下

public class Data { private final SomeField[] fields; ..... public SomeField[] getFields() { return map == null ? null : map.clone(); } 

安全性 – 方法返回内部数组

直接公开内部数组允许用户修改一些可能至关重要的代码。 返回数组副本更安全。

我知道我们不应该使用clone()来复制对象,而是使用copy constructor复制对象。

但是仍然会复制作为引用的内部对象。 有什么建议的方法可以避免上面的clone()

谢谢

实用方法Arrays.copyOf(T [] original,int newLength)将使用内部数组中的相同对象创建一个新数组。

返回内部数组的问题通常是防止对数组内容的意外更改,这些内容将与任何其他客户端共享。 共享包含的对象通常没有相同的关注顺序,但如果您实现某种类型的地图,您的要求可能会更严格。

要解决此问题,您必须避免使用三元运算符。 而不是这个,你必须使用if运算符。

例:

public CustomMap [] getMap(){CustomMap [] obj = null;

 if (map != null){ obj = map.clone(); } return obj; 

}

要么

public CustomMap [] getMap(){CustomMap [] obj = map == null? null:map.close();

 return obj; 

}

我使用abouve代码解决了我的问题。 我认为必须明确创建一个新对象。 我认为。

问候!