Avatar ·

Qual é a diferença entre <? super T> e <? extends T> em generics Java?

Olá, colegas! Comecei a estudar generics Java e me deparei com wildcards (curingas). Li a documentação e assisti a vídeos, mas ainda me confundo com duas construções: `` e ``. Eu entendo que `? extends T` significa "algum tipo que é subtipo de T", e `? super T` significa "algum tipo que é supertipo de T". Mas na prática, constantemente tenho erros de compilação. Por exemplo, tenho este código com List: ```java public class Test { public static void addNumbers(List list) { list.add(42); // Isso funciona } public static void readNumbers(List list) { Integer num = list.get(0); // Isso funciona list.add(42); // Erro de compilação! Por quê? } } ``` Por que não consigo adicionar um elemento a `List`, embora possa ler dele? E inversamente — por que posso adicionar a `List`, mas ao ler dele obtenho apenas Object?