哪个是好习惯 - 在方法中修改List,或者在方法中返回一个新List?

Kor*_*gay 15 java list

示例代码:

modifyMyList(myList);

public void modifyMyList(List someList){
    someList.add(someObject);
}
Run Code Online (Sandbox Code Playgroud)

要么:

List myList = modifyMyList(myList);

public List modifyMyList(List someList){
    someList.add(someObject)
    return someList;
}
Run Code Online (Sandbox Code Playgroud)

我相信还有第三个选项:你可以在modifyMyList方法中创建一个新的List并返回这个新的List ...

(第三个选项在这里,我太懒了但有人已经在答案中加了它:)

List myList = modifyMyList(myList);

public List modifyMyList(List someList){
    List returnList = new ArrayList();
    returnList.addAll(someList);
    returnList.add(someObject);
    return Collections.unmodifiableList(returnList);
}
Run Code Online (Sandbox Code Playgroud)

我有什么理由选择一个而不是另一个吗?在这种情况下应该考虑什么?

lan*_*ava 16

我有一个(自我强加的)规则,"永远不会改变公共方法中的方法参数".因此,在私有方法中,可以改变参数(我甚至试图避免这种情况).但是在调用公共方法时,参数永远不应该被改变,应该被认为是不可变的.

我认为变异方法论点有点hacky并且可能导致更难以看到的错误.

我知道这个规则有例外,但我需要一个很好的理由.