Hos*_*ein 8 java collections list
我试图了解创建列表的新实例之间的区别:
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
我已经使用Collections.emptyList了返回列表但是使用没有意义的参数调用的方法.
例如,您可能希望根据日期访问流的不同部分的流处理应用程序.您从流中查询项目的时间跨度,但如果该时间跨度中没有项目,则返回空列表.抛出异常没有任何意义,因为查询没有任何问题.返回null也没有多大意义,因为所有调用代码都需要检查null.
返回一个不可变的空列表允许调用代码很好地处理返回值,您不需要担心线程问题,因为不可变列表本质上是线程安全的.
| 归档时间: |
|
| 查看次数: |
10125 次 |
| 最近记录: |