Para cualquier colección que contenga elementos del tipo E
, addAll
debe ser capaz de tratar con colecciones de entrada no solo de E
, sino también de todas sus subclases. Por lo tanto, <? extends E>
. Sin esto, no podría agregar todos los elementos de List<Integer>
a List<Number>
, lo que claramente no sería correcto. *
Para su eliminación, no es necesario establecer estrictamente los límites, y no hay daño al intentar eliminar elementos de una colección de algún tipo totalmente no relacionado. P.ej. puede tener una colección de Number
s, de la cual sabe que solo contiene Integer
s, por lo que pasarla a removeAll
en un List<Integer>
debería funcionar bien, y sería estúpido que el compilador no lo permitiera.
Tenga en cuenta que according to the Javadoc, removeAll
opcionalmente puede arrojar un ClassCastException
, dependiendo de la implementación.
* La razón detrás de esto es que en Java, los genéricos son invariantes. Para obtener más detalles, consulte, por ejemplo, this thread.
Eso no es lo que está preguntando. – SLaks
Lo siento si no entendí bien. :( – Nicocube