我一直在想是否有更优雅的方法来返回属性并改变/“重置”其值。到目前为止,这是我一直在使用的方式:
[...]
final List<T> copyOfOriginal = new ArrayList<T>(original);
original.clear();
return copyOfOriginal;
[...]
我真的需要复制整个列表吗?
我一直在想是否有更优雅的方法来返回属性并改变/“重置”其值。到目前为止,这是我一直在使用的方式:
[...]
final List<T> copyOfOriginal = new ArrayList<T>(original);
original.clear();
return copyOfOriginal;
[...]
final List<T> ret = original;
original = new ArrayList<T>();
return ret;
这里需要注意的是,这会改变原始引用。如果有多个副本,可能需要额外小心。
original
是什么?它是方法参数还是您类中的字段(或两者都是)? - Pshemooriginal
是某个方法的参数,例如List<T> cloneAndClear(List<T> original)
,并且你将其用作List<T> newList = cloneAndClear(someList);
,那么传递的someList
参数将不会被 NPE 解决方案清除,因为它只交换了 本地 引用(因为 Java 是按值传递)。因此,上下文在这里很重要,应该在问题中加以澄清。 - Pshemooriginal
(在这种情况下是一个属性)及其所有条目,并在“之后”清除原始列表。由于在return语句之后无法执行任何操作,因此我总是先复制原始列表,然后清除原始列表,最后将副本作为代码中所示的返回值。 - Marvin