使用addAll你希望能够添加属于泛型类型的子类型的所有元素。这包括将List<String>
的所有元素添加到List<Object>
。我们使用? extends E
接受任何包含存储在此集合或任何子类型中的类型的Collection。
boolean addAll(java.util.Collection<? extends E> es);
List<Number> numbers = ...;
List<Integer> integers = ...;
numbers.addAll(integers);//works
boolean addAll(java.util.Collection<E> es);
numbers.addAll(integers);//does not work E != Integer
我们不能使用?
因为这将消除由仿制药提供的任何担保。
boolean addAll(java.util.Collection<? extends E> es);
List<Number> numbers = ...;
List<Integer> integers = ...;
List<String> strings = ...;
numbers.addAll(integers);//works
numbers.addAll(strings);//error
boolean addAll(java.util.Collection<?> es);
numbers.addAll(strings);//works - now we have strings in our Number collection
我们可以使用?
删除,因为试图从编号列表中删除字符串不会影响List<Number>
对象。
boolean removeAll(java.util.Collection<?> objects);
List<Objects> objects = ...;
List<Integer> integers = ...;
List<Number> numbers = ...;
numbers.removeAll(objects);//works
numbers.removeAll(integers);//works
boolean removeAll(java.util.Collection<? extends E> objects);
numbers.removeAll(objects);//does not work
numbers.removeAll(integers);//works
boolean removeAll(java.util.Collection<? super E> objects);
numbers.removeAll(objects);//works
numbers.removeAll(integers);//does not work
这不是他要问的。 – SLaks 2012-03-06 14:16:28
对不起,如果我误解了。 :( – Nicocube 2012-03-06 15:01:15