将作为参数传递的内容返回给Java中的方法是不是一种坏习惯?

时间:2016-11-29 16:30:13

标签: java

在修改此参数后,使方法返回作为参数传递给它的内容是不好的做法?

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;
}

2 个答案:

答案 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中找到类似的内容。