Comprendre le comportement des types bruts avec des méthodes génériques
Lorsque vous travaillez avec les génériques de Java, il est crucial de comprendre les implications de l'utilisation de types bruts et leur impact sur les méthodes génériques. Examinons un exemple de code spécifique et explorons comment les types bruts affectent la résolution des méthodes.
Considérez l'extrait de code suivant, dans lequel une ArrayList de chaînes est créée et convertie en tableau :
ArrayList<String> a = new ArrayList<String>(); String[] s = a.toArray(new String[0]);
Comme prévu, ce code se compile avec succès en Java 1.6 et 1.7. Cependant, si la référence ArrayList est déclarée comme type brut, une erreur se produit lors de la compilation :
ArrayList a = new ArrayList(); String[] s = a.toArray(new String[0]); // Error: Argument required String[] found Object[]
Dans ce scénario, le compilateur interprète la méthode générique toArray(myArray) comme renvoyant un Object[] malgré la réception une String[] comme argument. Ce comportement est assez inattendu, étant donné que la signature de la méthode spécifie clairement un paramètre de type
Pour comprendre cela, considérons la section 4.8 de la spécification du langage Java (JLS). Il précise que "le type d'une méthode d'instance M d'un type brut C qui n'est pas hérité de ses superclasses ou superinterfaces est le type brut qui correspond à l'effacement de son type dans la déclaration générique correspondant à C."
Essentiellement, lors de l'utilisation d'un type brut, le compilateur supprime essentiellement toutes les informations de type, ne laissant que la représentation brute de la classe. Cela signifie que, dans notre exemple, la méthode toArray devient effectivement une méthode non générique avec un type de retour Object[], même si elle a été initialement définie comme une méthode générique.
Cette perte de généricité dans les types bruts a des implications importantes :
Il est généralement recommandé d'éviter d'utiliser des types bruts et de s'appuyer plutôt sur des génériques pour la sécurité et la flexibilité des types. Cependant, comprendre le comportement des types bruts peut vous aider à résoudre les problèmes et à prendre des décisions éclairées dans des scénarios spécifiques.
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!