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

时间:2012-03-03 00:01:16

标签: java collections

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

您可能希望实现一个独立的Object,它实现Collection接口之一,而不扩展AbstractCollection。

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

答案 2 :(得分:0)

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

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