2013-06-16 6 views
2

Почему метод add(<T> element) и remove(Object o) принимают различные аргументы?Java add remove методы множеств

Например, в Set<Short> вы добавляете короткие элементы. Почему метод remove принимает Object? Если вы не можете добавить какой-либо другой тип данных, почему бы вам удалить другой тип данных?

спасибо.

+0

JavaDoc хорошо объясняет это: * Удаляет указанный элемент из этого набора, если он присутствует (дополнительная операция). Более формально удаляет элемент e такой, что (o == null? E == null: o.equals (e)) *. –

+0

remove не должен быть настолько избирательным в том типе требуемого параметра. –

ответ

0

Метод remove(obj), удаляет объект таким образом, чтобы (obj == null ? e ==null : obj.equals(e)) был true. Это из-за метода equals(Object), который принимает Object, что obj и e не должен быть такого же типа.

2

add(<T> element): для обеспечения добавления только элемента Т.

remove(Object o): вы можете удалить элемент T, даже если на него ссылается ссылка объекта.

Например:

T t = new T(); 
Set<Short> set = new HashSet<Short>(); 
Short number = 2; 
set.add(number); 
Object numberObject = number; 
set.remove(numberObject) // it will remove 2 from the set. 

почему бы удалить другой тип данных? мы не удаляем другой тип данных, но мы можем удалить данные, даже если на него ссылается ссылка Object (как в примере).