¿En qué se diferencian las palabras clave extends y super al usar generics en Java?
sobes.tech AI
Respuesta de la IA
En Java, al trabajar con genéricos, las palabras clave extends y super se utilizan para restringir los tipos y afectan la covarianza y la contravarianza.
-
? extends T— restricción superior (covarianza). Permite usar el tipo T o cualquier subclase de él. Esto significa que se pueden leer objetos del tipo T de la colección, pero no se pueden agregar objetos de forma segura a dicha colección (exceptonull). -
? super T— restricción inferior (contravarianza). Permite usar el tipo T o cualquier superclase de él. Esto significa que se pueden agregar objetos del tipo T a la colección, pero al leer solo se pueden obtener objetos del tipo Object o de un tipo más general.
Ejemplo:
List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Se puede leer como Number
// listExtends.add(10); // Error de compilación
List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Se puede agregar Integer
Object obj = listSuper.get(0); // Al leer, el tipo es Object
Por lo tanto, extends se usa cuando se necesita leer datos de la estructura, y super cuando se necesita escribir datos.