为什么Unmodifiable集合受Collections包保护?

时间:2014-02-04 22:11:41

标签: java

我无法理解为什么Java希望隐藏不可变的不可修改的集合被传递。

它使开发人员的生活更加艰难,因为你不能保证一个类返回任何 immutable 不可修改的东西,迫使你在整个代码中调用Collections.unmodifiable。这既浪费又烦人。

我是否缺少为什么要保护这些方法,或者我缺少的另一个包含不可变和/或不可修改集合的公共版本的库?

为了更多地了解java,让我们说Scala不算作“包含不可变集合的公共版本的库”的答案:)

2 个答案:

答案 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));
}

我明白为什么这可以被认为是浪费(这些仿制药也让它变得丑陋)。为什么该方法不检查传递的实例是否已经已经 UnmodifiableRandomAccessListUnmodifiableList