如何返回并清空一个列表?

3

我一直在想是否有更优雅的方法来返回属性并改变/“重置”其值。到目前为止,这是我一直在使用的方式:

[...]

final List<T> copyOfOriginal = new ArrayList<T>(original);
original.clear();

return copyOfOriginal;

[...]

我真的需要复制整个列表吗?

1
如果您正在尝试克隆一个ArrayList,那么这是可以的。您实际上需要解决什么问题,需要进行这样的操作? - OneCricketeer
@cricket_007 我想返回并清除列表,而不是克隆它... 这很容易实现(请参见NPE的答案) - Marvin
original 是什么?它是方法参数还是您类中的字段(或两者都是)? - Pshemo
@Pshemo 这是我想要返回并清空的列表。 - Marvin
1
“list I wan't to return and clear” 的意思是你想要返回一个空列表,而不是你的代码所展示的。我之前问这个问题是因为如果 original 是某个方法的参数,例如 List<T> cloneAndClear(List<T> original),并且你将其用作 List<T> newList = cloneAndClear(someList);,那么传递的 someList 参数将不会被 NPE 解决方案清除,因为它只交换了 本地 引用(因为 Java 是按值传递)。因此,上下文在这里很重要,应该在问题中加以澄清。 - Pshemo
@Pshemo 对不起,我刚才表达得有点不清楚。我想要返回列表original(在这种情况下是一个属性)及其所有条目,并在“之后”清除原始列表。由于在return语句之后无法执行任何操作,因此我总是先复制原始列表,然后清除原始列表,最后将副本作为代码中所示的返回值。 - Marvin
1个回答

7
在许多情况下,您可以在返回原始引用的同时将列表替换为新的空列表:
final List<T> ret = original;
original = new ArrayList<T>();
return ret;

这里需要注意的是,这会改变原始引用。如果有多个副本,可能需要额外小心。


是的,这很简单...我怎么没想到呢 :P - Marvin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接