Мне интересно, почему класс Collections
был создан. Теоретически методы из этого класса могут быть помещены в класс AbstractCollection
. Итак, в чем причина создания отдельного класса utils?Почему методы из Коллекций не были помещены в AbstractCollection?
ответ
- Не каждая коллекция расширяет
AbstractCollection
, и эти методы по-прежнему применимы. - Слишком много методов в одном классе затрудняет понимание этого класса, когда вы прокладываете себе путь через Javadoc.
- Если вы получаете
Collection
от ненадежного абонента, убедитесь, что вы всегда используете ту же реализацию, например.unmodifiableCollection
может быть полезным. - В большинстве случаев вы не отслеживаете точный тип реализации коллекций: например, вы пишете
Set<E> set = new HashSet<>();
. В этом случае вы не сможете использовать какие-либо методы, определенные вAbstractCollection
, которые не входят вCollection
.
Не могли бы вы привести пример, который класс 'Collection' не расширяет' AbstractCollection'? – mmatloka
Я не уверен, что в JDK есть примеры, но сторонние проекты, такие как [Guava] (http://guava-libraries.googlecode.com), делают это все время: например, иерархия 'ImmutableCollection' и иерархия 'ForwardingCollection' не расширяет 'AbstractCollection'. –
@mich, вы можете реализовать свою собственную коллекцию, которая не расширяет AbstractCollection. Это будет пример коллекции, не являющейся абстрактной коллекцией. –
Возможно, вам захочется реализовать независимый объект, который реализует один из интерфейсов Collection
без расширения AbstractCollection.
Например: http://commons.apache.org/collections/api-release/org/apache/commons/collections/bag/HashBag.html
Хорошо, будем честными: это потому, что «Сумка» намеренно нарушает контракт «Коллекция». –
Когда люди JDK решают, что они хотят, чтобы добавить больше методов в классе Collections они просто должны их реализовать. Например, newSetFromMap был добавлен в 1.6. Они не могут добавить больше методов в интерфейс Collection и поддерживать обратную совместимость, потому что, как сказал Луис Вассерман, не все коллекции расширяют AbstractCollection - в частности, третьи стороны, входящие в состав Guava, Commons Collections, Hibernate, OpenJPA и т. Д.
Это не так много проблем в языках, на которых есть mixins вместо интерфейсов. Скала, например, имеет огромное количество методов в своих коллекциях. Так много, на самом деле, что вы столкнулись с проблемой номер два в Луи Вассермане, которую трудно читать javadoc (в данном случае - scaladoc).
- 1. Почему AbstractCollection не реализует equals()?
- 2. Java Illegale преобразование из коллекции в AbstractCollection
- 3. Add() в классе AbstractCollection
- 4. содержит() метод в AbstractCollection
- 5. Правильные методы для коллекций
- 6. Не может сериализовать сбор коллекций
- 7. Усовершенствованные методы коллекций итератора
- 8. Какова цель AbstractCollection
- 9. Реализация Итератора для abstractCollection
- 10. NSXMLParserDelegate методы, которые не были вызваны
- 11. Почему большинство файлов на сайте Dreamweaver были помещены в каталог под названием 'upload'?
- 12. методы Accessor для коллекций в Java
- 13. Проверьте, не были ли вызваны методы void
- 14. GCC: почему постоянные переменные не помещены в .rodata
- 15. Printf аргументы не помещены в стек
- 16. Можно использовать методы ActiveRecord для коллекций AR?
- 17. Почему NHibernate требует, чтобы методы объектов были виртуальными?
- 18. ПРЕДУПРЕЖДЕНИЕ: FacesMessage (ы) были помещены в очередь, но могут не отображаться
- 19. INFO: ПРЕДУПРЕЖДЕНИЕ: FacesMessage (ы) были помещены в очередь, но могут не отображаться.
- 20. Почему методы UIImagePickerControllerDelegate не срабатывают?
- 21. Почему многие из GUI CObjects ie (CButton) должны быть помещены в кучу, а не в стек?
- 22. Создание массива из коллекций
- 23. Почему .fetch() не определено для коллекций?
- 24. Ресурсы maven не помещены в файл jar
- 25. Данные POST не помещены в массив POST
- 26. mongo: Почему я не вижу коллекций?
- 27. Методы, которые не были протестированы в Spring MVC project
- 28. Looping запроса, который возвращает результаты в порядке они были помещены в
- 29. Эффективный способ создания коллекций из других коллекций
- 30. Медленный код в ArrayList/Методы коллекций в Java
Возможный дубликат [Разница между сборкой Java и коллекциями] (http://stackoverflow.com/ вопросы/1796275/difference-between-java-collection-and-collections) –
Не совсем дубликат. Это 'Коллекции' против' AbstractCollection'. Связанный вопрос: 'Collection' vs' Collections'. – Pursuit