Java: Почему Set <E>упоминает все методы в Collection <E> - PullRequest
3 голосов
/ 04 ноября 2011

http://download.oracle.com/javase/tutorial/collections/interfaces/set.html

Почему интерфейс Set перечисляет все методы в Collection?Разве эти методы не наследуются дочерним интерфейсом автоматически?

Ответы [ 3 ]

9 голосов
/ 04 ноября 2011

Он перечисляет их все, потому что документация отличается, даже если сами объявления одинаковы.

2 голосов
/ 04 ноября 2011

Эта ссылка является учебником , а не документацией по API. Попробуйте эту ссылку:

http://download.oracle.com/javase/6/docs/api/java/util/Set.html

1 голос
/ 04 ноября 2011

Set работает иначе, чем Collection - в Set вы не можете иметь повторяющихся записей. Если бы вы просто копировали методы из Collection, вы бы реализовали Set неправильно ...

Как написала Кэти - документация отличается (потому что логика / использование различны)

Коллекция .add ():

Гарантирует, что эта коллекция содержит указанный элемент (необязательная операция). Возвращает истину, если это Коллекция изменилась в результате звонка. (Возвращает false, если это Коллекция не разрешает дубликаты и уже содержит указанный элемент.) Коллекции, которые поддерживают эту операцию, могут размещаться ограничения на то, какие элементы могут быть добавлены в эту коллекцию. В в частности, некоторые коллекции откажутся добавлять нулевые элементы, и другие наложат ограничения на тип элементов, которые могут быть добавлено. Коллекционные классы должны четко указывать в своих документирование любых ограничений на добавление элементов.

Если коллекция отказывается добавлять определенный элемент по какой-либо причине кроме того, что он уже содержит элемент, он должен бросить исключение (вместо возврата false). Это сохраняет инвариант что коллекция всегда содержит указанный элемент после этого звонок возвращается.

Установить .add ():

Добавляет указанный элемент к этому набору, если его еще нет (необязательная операция). Более формально добавляет указанный элемент e к этот набор, если в наборе нет элемента e2, такого что (e == null? e2 == ноль: e.equals (e2)). Если этот набор уже содержит элемент, вызов оставляет набор неизменным и возвращает ложь. В комбинации с ограничением на конструкторы, это гарантирует, что никогда не устанавливает содержат повторяющиеся элементы. Изложенное выше не означает, что наборы должны принимать все элементы; наборы могут отказаться добавлять какие-либо конкретные элемент, включая ноль, и выдать исключение, как описано в спецификация для Collection.add. Индивидуальные наборы реализаций должны четко документировать любые ограничения на элементы, которые они могут содержат.

...