哪种做法是好的做法 - 修改方法中的 List,还是在方法中返回新的 List?

2022-09-01 20:56:53

示例代码:

modifyMyList(myList);

public void modifyMyList(List someList){
    someList.add(someObject);
}

艺术

List myList = modifyMyList(myList);

public List modifyMyList(List someList){
    someList.add(someObject)
    return someList;
}

我相信还有第三个选项:您可以在modifiedMyList方法中创建一个新的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);
}

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


答案 1

我有一个(自我强加的)规则,它是“永远不要在公共方法中改变方法参数”。因此,在私有方法中,可以改变参数(我甚至也尽量避免这种情况)。但是,在调用公共方法时,参数永远不应发生突变,而应被视为不可变的。

我认为突变方法参数有点棘手,并且可能导致更难看到的错误。

众所周知,我对这条规则有例外,但我需要一个很好的理由。


答案 2

实际上没有功能差异。

当您想要返回的列表时,您将了解差异

List someNewList = someInstnace.modifyMyList(list);