Avatar ·

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 : `` et ``. 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 list) { list.add(42); // Cela fonctionne } public static void readNumbers(List 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`, alors que je peux en lire ? Et inversement — pourquoi puis-je ajouter à `List`, mais en lisant je n'obtiens que Object ?