Avatar ·

¿Cuál es la diferencia entre <? super T> y <? extends T> en los genéricos de Java?

¡Saludos, colegas! Empecé a estudiar los genéricos de Java y me encontré con los wildcards (comodines). Leí la documentación y vi videos, pero todavía me confundo con dos construcciones: `` y ``. Entiendo que `? extends T` significa "algún tipo que es subtipo de T", y `? super T` significa "algún tipo que es supertipo de T". Pero en la práctica, constantemente tengo errores de compilación. Por ejemplo, tengo este código con List: ```java public class Test { public static void addNumbers(List list) { list.add(42); // Esto funciona } public static void readNumbers(List list) { Integer num = list.get(0); // Esto funciona list.add(42); // ¡Error de compilación! ¿Por qué? } } ``` ¿Por qué no puedo agregar un elemento a `List`, aunque puedo leer de él? Y viceversa: ¿por qué puedo agregar a `List`, pero al leer de allí obtengo solo Object?