Почему методы из коллекций не были помещены в AbstractCollection? - PullRequest
4 голосов
/ 03 марта 2012

Мне интересно, почему был создан класс Collections. Теоретически методы из этого класса могут быть помещены в класс AbstractCollection. Так по какой причине был создан отдельный класс утилит?

Ответы [ 3 ]

3 голосов
/ 03 марта 2012
  1. Не каждая коллекция расширяет AbstractCollection, и эти методы все еще применимы там.
  2. Слишком много методов в одном классе затрудняет понимание этого класса, когда вы работаете на своем путичерез Javadoc.
  3. Если вы получаете Collection от ненадежного абонента, может быть полезно быть уверенным, что вы всегда используете одну и ту же реализацию, например unmodifiableCollection.
  4. В большинстве случаев вы не отслеживаете точный тип реализации коллекций: например, вы пишете Set<E> set = new HashSet<>(); В этом случае вы не сможете использовать методы, определенные в AbstractCollection, которые нев Collection.
2 голосов
/ 03 марта 2012

Возможно, вы захотите реализовать независимый объект, который реализует интерфейс интерфейса Collection без расширения AbstractCollection.

Например: http://commons.apache.org/collections/api-release/org/apache/commons/collections/bag/HashBag.html

0 голосов
/ 03 марта 2012

Когда люди из JDK решают, что они хотят добавить больше методов в класс Collections, им просто нужно их реализовать. Например, newSetFromMap был добавлен в 1.6. Они не могут добавлять дополнительные методы в интерфейс Collection и поддерживать обратную совместимость, потому что, как сказал Луи Вассерман, не все коллекции расширяют AbstractCollection, в частности сторонние, которые являются частью Guava, Commons Collections, Hibernate, OpenJPA и т. Д.

Это не такая большая проблема для языков, в которых вместо интерфейсов используются миксины. Например, у Scala огромное количество методов в своих коллекциях. На самом деле, так много, что вы сталкиваетесь со вторым номером Луи Вассермана о трудном для чтения javadoc (в данном случае - это scaladoc).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...