Super Extends Genéricos - Tensho97/Aprende-a-Aprender GitHub Wiki
Es muy habitual con los genéricos ver esto: <?> acompañado de "extends" o "super". Explicaremos lo que son a través de un ejemplo: Supongamos que tenemos una lista de números enteros:
List<Integer> miLista = new List<>( );
y pensamos , "bueno, Integer es una subclase de Numbre, así que podemos hacer esto" :
List<Number> miLista = new List<Integer>( );
No compila, porque solo se le pueden meter objetos de tippo Numbre, no objetos de clase Integer, Double, Short , Long. Sólo de la clase Number. Ahora bien, si escribimos esto:
List<? extends Number> miLista = new List<Integer>( );
Estamos indicando que la lista aceptará objetos de las clases que extiendan de "Number". En este caso "Integer".
List<? super Integer>
En este caso le estamos indicando que la lista admitirá cualquier objeto que pertenezca a una clase superior de "integer".
¿ Y qué ocurre si hacemos esto?
List <?>
En esto caso estamos indicando que la lista aceptará cualquier tipo de objeto.
Autor : Julián