为什么有人在java中使用Collections.emptyList?

Hos*_*ein 8 java collections list

可能重复:
Collections.emptyList()与新实例

我试图了解创建列表的新实例之间的区别:

new ArrayList<X>
Run Code Online (Sandbox Code Playgroud)

Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)

据我所知,后者返回一个不可变列表.这意味着无法添加,删除或修改它.我想知道为什么会创建和不可变的emptyList?有什么用?谢谢

Thi*_*ilo 13

不可变是允许可重用​​的实例.

Collections.emptyList将始终返回完全相同的单例实例.

这非常有效.

除此之外,可以在线程之间安全地共享不可变数据,并保证避免由于编码错误而产生的奇怪副作用.因此,它也不需要防御性拷贝.


Pet*_*rey 13

假设您必须返回一个集合,并且您不希望每次都创建几个对象.

interface Configurable {
    List<String> getConfigurationList();
}

// class which doesn't have any configuration
class SimpleConfigurable implements Configurable {
    public List<String> getConfigurationList() { return Collections.emptyList(); }
}
Run Code Online (Sandbox Code Playgroud)

返回空集合通常比返回更好 null

  • 如果SimpleConfigurable类的客户端尝试将元素添加到getConfigurationList()返回的空列表中,该怎么办? (5认同)

Séb*_*nec 7

我经常使用空列表作为Null对象:这避免了必须检查null.


Mat*_*yra 5

我已经使用Collections.emptyList了返回列表但是使用没有意义的参数调用的方法.

例如,您可能希望根据日期访问流的不同部分的流处理应用程序.您从流中查询项目的时间跨度,但如果该时间跨度中没有项目,则返回空列表.抛出异常没有任何意义,因为查询没有任何问题.返回null也没有多大意义,因为所有调用代码都需要检查null.

返回一个不可变的空列表允许调用代码很好地处理返回值,您不需要担心线程问题,因为不可变列表本质上是线程安全的.