Quelle est la différence entre <? super T> et <? extends T> dans les generics Java ?
Bonjour, collègues ! J'ai commencé à étudier les generics Java et j'ai rencontré les wildcards. J'ai lu la documentation et regardé des vidéos, mais je confonds toujours deux constructions : ` super T>` et ` extends T>`.
Je comprends que `? extends T` signifie "un type qui est un sous-type de T", et `? super T` signifie "un type qui est un super-type de T". Mais en pratique, j'obtiens constamment des erreurs de compilation.
Par exemple, j'ai ce code avec List :
```java
public class Test {
public static void addNumbers(List super Integer> list) {
list.add(42); // Cela fonctionne
}
public static void readNumbers(List extends Integer> list) {
Integer num = list.get(0); // Cela fonctionne
list.add(42); // Erreur de compilation ! Pourquoi ?
}
}
```
Pourquoi ne puis-je pas ajouter un élément à `List extends Integer>`, alors que je peux en lire ? Et inversement — pourquoi puis-je ajouter à `List super Integer>`, mais en lisant je n'obtiens que Object ?
No answers yet.
Connectez-vous pour laisser une réponse
Blogs