考虑一下
public class Data {
private final SomeField[] fields;
.....
public SomeField[] getFields() {
return map == null ? null : map.clone();
}
安全性 - 方法返回内部数组
直接公开内部数组允许用户修改一些代码 这可能很关键。返回数组副本更安全。
我知道我们不应该使用clone()
复制对象,而是使用copy constructor
复制对象。
但是仍然会复制作为引用的内部对象。
建议哪些方法可以避免上述clone()
?
由于
答案 0 :(得分:2)
实用程序方法Arrays.copyOf(T [] original,int newLength)将使用内部数组中的相同对象创建一个新数组。
返回内部数组的问题通常是防止对数组内容的意外更改,这些内容将与任何其他客户端共享。共享包含的对象通常没有相同的关注顺序,但如果您要实现某种类型的地图,您的要求可能会更加严格。
答案 1 :(得分:-2)
要解决此问题,您必须避免使用三元运算符。 而不是这个,你必须使用if运算符。
示例:
public CustomMap [] getMap(){ CustomMap [] obj = null;
if (map != null){
obj = map.clone();
}
return obj;
}
OR
public CustomMap[] getMap() {
CustomMap[] obj = map == null ? null : map.close();
return obj;
}
我使用abouve代码解决了我的问题。 我认为必须明确创建一个新对象。我想。
问候!