返回列表或通过引用修改

Dav*_*vid 9 java

在java中,我有一个修改列表内容的方法.使用起来更好:

public List modifyList(List originalList) { // note - my real method uses generics
     // iterate over originalList and modify elements
     return originalList;
}
Run Code Online (Sandbox Code Playgroud)

或者更好的做法如下:

public void modifyList(List originalList) {
      // iterate over originalList and modify elements
      // since java objects are handled by reference, the originalList will be modified
      // even though the originalList is not explicitly returned by the method
}
Run Code Online (Sandbox Code Playgroud)

注 - 两种方法之间的唯一区别是返回类型(一个函数返回void而另一个函数返回List).

Mac*_*ski 1

这完全取决于您如何使用List- 如果您正在实现某种列表并且这是您的List类的非静态方法,那么您应该编写

public List modifyList() // returning list
Run Code Online (Sandbox Code Playgroud)

或者

public int modifyList() // number of elements changed
Run Code Online (Sandbox Code Playgroud)

如果是这个类之外的方法

关于对列表或其副本执行操作:您应该考虑所需的行为和您的期望 - 最重要的是 -我需要“旧”列表副本吗?。深度复制列表可能会产生一点开销。浅复制将无法在不影响“旧”列表的情况下对列表的某些元素执行操作(即更改其属性 - 如果它们是对象)。

关于返回 void:返回更改列表(或至少更改元素的数量)是一个很好的做法,这将允许您链接方法调用,如果不需要,您可以随时忽略它。