使用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