繁体   English   中英

为什么集合中的方法没有放在AbstractCollection中?

[英]Why methods from Collections were not put in AbstractCollection?

我想知道为什么要创建类Collections 理论上,这个类中的方法可以放在AbstractCollection类中。 那么创建单独的utils类的原因是什么?

  1. 并非每个集合都扩展了AbstractCollection ,这些方法仍然适用于那里。
  2. 在同一个类中有太多的方法会让你在通过Javadoc工作时更难理解这个类。
  3. 如果您从不受信任的调用者那里收到一个Collection ,那么确保您总是使用相同的实现,例如unmodifiableCollection可能会有所帮助。
  4. 大多数情况下,您不会跟踪集合的确切实现类型:例如,您编写Set<E> set = new HashSet<>(); 在这种情况下,您将无法使用AbstractCollection中定义的任何不在Collection

可能有一段时间你想要实现一个独立的Object,它实现了Collection接口之一,而没有扩展AbstractCollection。

例如: http//commons.apache.org/collections/api-release/org/apache/commons/collections/bag/HashBag.html

当JDK人员决定要向Collections类添加更多方法时,他们只需要实现它们。 例如,在1.6中添加了newSetFromMap。 他们无法向Collection接口添加更多方法并保持向后兼容性,因为正如Louis Wasserman所说,并非所有集合都扩展AbstractCollection - 特别是属于Guava,Commons Collections,Hibernate,OpenJPA等的第三方集合。

在具有mixins而不是接口的语言中,这几乎没有问题。 例如,Scala在其集合中拥有大量方法。 事实上,很多人都遇到过Louis Wasserman的第二个难以阅读的问题(在这种情况下是scaladoc)。

暂无
暂无

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

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