St.*_*rio 4 java collections copy list
我正在阅读J. Bloch的有效Java,现在我正在关于避免返回nulls,但返回空集合的部分.这是该部分的代码示例:
// The right way to return a copy of a collection
public List<Cheese> getCheeseList() {
if (cheesesInStock.isEmpty())
return Collections.emptyList(); // Always returns same list
else
return new ArrayList<Cheese>(cheesesInStock);
}
Run Code Online (Sandbox Code Playgroud)
我真的无法理解只返回cheesesInStockif 有什么问题cheesesInStock.isEmpty().为什么返回预定义更好Collections.emptyList().如果我们返回,我们可能遇到什么样的麻烦cheesesInStock.
因为
Collections.emptyList();具有单例模式的资源来节省资源.另外,您可以查看API:
返回空列表(不可变).此列表是可序列化的.
此示例说明了获取空列表的类型安全方法:
List<String> s = Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)
实现说明:此方法的实现不需要为每个调用创建单独的List对象.使用此方法可能具有与使用类似命名字段相当的成本.(与此方法不同,该字段不提供类型安全性.)
这里的想法更多是关于安全对象发布或共享,返回对可变列表的引用允许调用者改变原始列表,这通常是一个坏主意.如果列表或对象通常是不可变的,那么您不需要这样做,例如String是不可变的,因此共享它是安全的.
String getString(){
return someString; // no need to copy
}
Run Code Online (Sandbox Code Playgroud)
共享可变状态带来两个主要问题:
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |