在修改此参数后,使方法返回作为参数传递给它的内容是不好的做法?
public int[] arrayLeftRotation(int[] x) {
for(int i=0;i<x.length;i++){
x[i]=1;
}
return x;
}
与修改和返回参数的副本相反。
public int[] arrayLeftRotation(int[] x) {
int[] y = x;
for(int i=0;i<y.length;i++){
y[i]=1;
}
return y;
}
答案 0 :(得分:1)
如果您总是返回传递给方法的相同数组,则无需返回它。该方法可以简单地具有$scope.gridOptions.data
返回类型。
以void
实施为例:
ArrayList.toArray()
它接受一个数组作为输入并且可以返回相同的数组实例(在修改它之后),但在某些情况下它返回一个不同的(新)数组。这是返回数组而不是public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
返回类型的唯一原因。
BTW,在你的第二个代码片段中,你将返回相同的数组。 void
不会创建副本。要创建副本,请使用int[] y = x
。创建副本是否有意义取决于用例。如果方法的目的是修改输入数组(如在int[] y = Arrays.copyOf(x,x.length);
中),则无需复制输入数组。
答案 1 :(得分:0)
返回参数没有任何意义,这种方法不应返回任何内容。相反,方法应该具有void
返回类型签名和有意义的名称,如applyLeftRotation
。
当您修改作为参数传递的对象然后将其返回时,这是一种不好的做法。其他开发人员会假设您已经返回了一个新对象。
但是,如果您返回一个新对象,该对象是作为参数接收的对象,那么这是完全正常的。这些都是所谓的immutable objects。此外,您可以在builder pattern中找到类似的内容。