繁体   English   中英

为什么将不可修改的集合保护到“集合”包中?

[英]Why are the Unmodifiable collections protected to the Collections package?

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

这使开发人员的工作更加困难,因为您不能保证类返回的是不可修改的不可变内容 ,从而迫使您将对Collections.unmodifiable的调用分散到整个代码中。 这既浪费又烦人。

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

为了更多地了解Java,假设Scala不算是“包含不可变集合的公共版本的库”的答案:)

我认为这与框架的设计目标有关:

主要设计目标是生产一种尺寸更小且更重要的是“概念重量”的API。

来源

如果您想了解更多概念上的分量,则应该查看Guava的不可变集合类型 :)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM