我无法理解为什么Java希望隐藏不可变的不可修改的集合被传递。
它使开发人员的生活更加艰难,因为你不能保证一个类返回任何 immutable 不可修改的东西,迫使你在整个代码中调用Collections.unmodifiable。这既浪费又烦人。
我是否缺少为什么要保护这些方法,或者我缺少的另一个包含不可变和/或不可修改集合的公共版本的库?
为了更多地了解java,让我们说Scala不算作“包含不可变集合的公共版本的库”的答案:)
答案 0 :(得分:2)
我认为这与框架的设计目标有关:
主要设计目标是制作尺寸较小的API,更重要的是,制作“概念重量”。
(Source)
如果您愿意学习更多的概念性重量,您应该查看Guava's immutable collection types。)
答案 1 :(得分:0)
Collections
接口允许包装一个退出的Collection
,以便调用mutator方法导致失败。
unmodifiableCollection(Collection c):“返回指定集合的不可修改的视图。”
它让开发人员的生活更加艰难,因为你不能保证一个类返回任何不可变的东西,......这既浪费又烦人。
Collections.unmodifiableList()
方法的JDK源是:
public static <T> List<T> unmodifiableList(List<? extends T> list) {
return (list instanceof RandomAccess ?
new UnmodifiableRandomAccessList<>(list) :
new UnmodifiableList<>(list));
}
我明白为什么这可以被认为是浪费(这些仿制药也让它变得丑陋)。为什么该方法不检查传递的实例是否已经已经 UnmodifiableRandomAccessList
或UnmodifiableList
?