En Java, l'utilisation de types bruts peut entraîner des conséquences inattendues lors de l'interaction avec des méthodes génériques.
Considérez l'extrait de code suivant :
ArrayList<String> a = new ArrayList<String>(); String[] s = a.toArray(new String[0]);
Ce code se compile avec succès dans JDK 1.6 et JDK 1.7. Cependant, si nous déclarons la référence List comme type brut :
ArrayList a = new ArrayList(); String[] s = a.toArray(new String[0]);
Nous rencontrons une erreur du compilateur indiquant qu'un String[] est requis mais qu'un Object[] a été trouvé.
Ceci ce comportement vient du fait que l'utilisation d'un type brut pour la référence List supprime la possibilité d'utiliser des génériques pour les membres d'instance de ce type. Ceci ne se limite pas aux méthodes génériques, comme le montre l'exemple suivant :
public class MyContainer<T> { public List<String> strings() { return Arrays.asList("a", "b"); } } MyContainer container = new MyContainer<Integer>(); List<String> strings = container.strings(); // gives an unchecked warning!
Ce comportement est indiqué explicitement dans la spécification du langage Java (JLS) :
Le type d'un constructeur (§ 8.8), méthode d'instance (§8.4, §9.4), ou champ non statique (§8.3) 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.
Par conséquent, l'utilisation des types bruts doit être effectuée avec prudence, car elle peut entraîner des limitations inattendues et même des erreurs de compilation lors de l'utilisation de méthodes génériques ou accéder aux membres de l'instance.
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!