例如,如果我们有一个类,并且其中一个方法返回一个对象,则应返回该对象的深层副本。
例如,在返回整数数组之前,我们还应该在返回数组之前进行深度复制/克隆。
对象数组也是如此吗?例如,我有一个类型为package的对象数组:
//trunk[] is an instance variable array that contains objects of type Package in this class
//method to return array
public Package[] getTrunk() {
Package[] temp = new Package[trunk.length];
for(int i = 0; i < trunk.length; i++) {
temp[i] = trunk[i];
}
return temp;
}
由于对象是引用类型,这里是否有使用for循环的用途?如果没有,应该如何正确返回数组?
答案 0 :(得分:2)
如果返回中继线阵列,则呼叫者可以修改中继线阵列。如果返回中继线阵列的副本,则调用者无法修改中继线阵列。
您是否关心呼叫者是否可以修改中继线阵列?
该问题的答案部分取决于呼叫者是谁。如果这是我的代码调用我的代码,并且我知道我不是在修改数组,只是查看它甚至不保留副本,那么返回实际的数组可能就可以了。并非每个接口都需要防白痴。防白痴标价。
(我看到这是一个“公共”接口,但这可能只是意味着多包装的模块前产品结构)
在我看来,您不必担心某些神话般的“最佳实践”,而应该担心软件的行为方式。
答案 1 :(得分:0)
关于这个问题,原始数组和复杂类型数组(某种对象)之间没有区别。因此,通常您可以说,是的,您应该只返回一份副本。
但是在某些情况下,可能会不返回副本,因为