实际上,最好返回像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和内存方面为您提供更好的性能。

09-08 10:38