实际上,最好返回像this这样的空列表:
return Collections.emptyList();
或像this:
return new ArrayList<Foo>();
还是这完全取决于您对返回列表的处理方式?
最佳答案
主要区别在于Collections.emptyList()
返回一个不可变的列表,即无法向其添加元素的列表。 (同样适用于Java 9中引入的List.of()
。)
在极少数情况下,您确实想修改返回的列表,因此Collections.emptyList()
和List.of()
不是一个好的选择。
我想说,只要合同(文档)没有明确声明不同的状态,返回一个不可变的列表就很好(甚至是首选的方式)。
另外,emptyList()
might not create a new object with each call.
此方法的实现无需为每个调用创建单独的List对象。使用此方法与使用相同名称的字段相比可能具有可比的成本。 (与这种方法不同,该字段不提供类型安全性。)emptyList
的实现如下所示:
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
因此,如果经常调用您的方法(返回一个空列表),则此方法甚至可以在CPU和内存方面为您提供更好的性能。