Maison  >  Article  >  Java  >  Pourquoi l'utilisation de types bruts avec des méthodes génériques entraîne-t-elle des erreurs de type en Java ?

Pourquoi l'utilisation de types bruts avec des méthodes génériques entraîne-t-elle des erreurs de type en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-12 00:10:03621parcourir

Why does using raw types with generic methods lead to type errors in Java?

Combinaison de types bruts et de méthodes génériques

Lorsque vous travaillez avec des génériques en Java, il est important de comprendre les implications de l'utilisation de types bruts. Un type brut est simplement une référence à un type générique sans aucun paramètre de type spécifié.

Le problème

Considérez le code suivant :

ArrayList<String> a = new ArrayList<>();
String[] s = a.toArray(new String[0]);

Ce code est compilé avec succès car toArray est une méthode générique qui accepte un tableau de type comme argument. Cependant, si la référence ArrayList est déclarée comme type brut :

ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);

Le compilateur générera une erreur, indiquant qu'un String[] est requis mais qu'un Object[] a été trouvé. En effet, le compilateur interprète la méthode générique comme renvoyant Object[] malgré la réception de String[] comme argument.

Comprendre les types bruts

Pour comprendre ce comportement, il est Il est essentiel de réaliser que lorsque vous utilisez un type brut, vous perdez la possibilité de spécifier des paramètres de type. La spécification du langage Java (JLS) indique que pour un type brut :

"Le type d'un constructeur, d'une méthode d'instance ou d'un champ non statique 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."

En d'autres termes, toutes les méthodes et champs génériques au sein d'un type brut sont traités comme s'ils étaient déclarés avec raw types eux-mêmes.

Implications pour les méthodes génériques

Cela signifie que lorsque vous utilisez un type brut comme cible d'un appel de méthode générique, le compilateur ne peut pas déduire le paramètre de type de la méthode. En conséquence, la méthode sera considérée comme générique uniquement sur le paramètre de type de l’argument. Dans notre cas, puisque nous avons passé un argument String[], la méthode toArray est traitée comme . Par conséquent, le type de retour sera T[], ce qui équivaut à String[].

Références pour des lectures complémentaires

  • [JLS 4.8 : Raw Types](https://docs.oracle.com/javase/specs/jls/se17/html/jls-4.html#jls-4.8)
  • [Les didacticiels Java : Génériques](https:/ /docs.oracle.com/javase/tutorial/java/generics/)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn