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: ` super T>` e ` extends T>`.
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 super Integer> list) {
list.add(42); // Isso funciona
}
public static void readNumbers(List extends Integer> 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 extends Integer>`, embora possa ler dele? E inversamente — por que posso adicionar a `List super Integer>`, mas ao ler dele obtenho apenas Object?
No answers yet.
Faça login para deixar uma resposta
Blogs