Les multiples caractères génériques de Java : démystifier la confusion du compilateur
Bien que l'extrait de code de la question puisse initialement sembler déroutant, les principes sous-jacents sont assez simples et adhérez au système de types génériques de Java.
Le rôle de Caractères génériques
Les caractères génériques (*) représentent des types inconnus. Dans l'extrait, l'utilisation de plusieurs caractères génériques crée une incertitude pour le compilateur :
static void doNothing(List<?> list1, List<?> list2) { }
Étant donné que les caractères génériques ne sont pas liés, vous pouvez appeler doNothing avec des listes de types différents, par exemple, List
Caractères génériques imbriqués et conversion de capture
La confusion vient principalement d'une mauvaise compréhension du rôle des éléments imbriqués caractères génériques :
static void probablyIllegal(List<List<?>> lol, List<?> list) { }
Dans ce cas, le caractère générique imbriqué List> ne capture pas les types tels que List
static void nowDefinitelyIllegal(List<? extends List<?>> lol, List<?> list) { }
Maintenant, si nous essayons d'ajouter une liste (qui peut être une Liste
Notes supplémentaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!