返回“数据”可能会暴露内部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代码解决了我的问题。 我认为必须明确创建一个新对象。 我认为。
问候!