1. Que sont les erreurs d’ambiguïté ?
2. Exemple d'ambiguïté : surcharge d'effacement
Code problématique :
class MyGenClass<T, V> { T ob1; V ob2; // Tentativa de sobrecarga void set(T o) { ob1 = o; } void set(V o) { ob2 = o; } }
Erreur : La tentative de surcharge de la méthode set() basée sur les paramètres génériques T et V semble valide, mais provoque une ambiguïté.
3. Raisons de l'ambiguïté
Exemple :
MyGenClass<String, String> obj = new MyGenClass<>();
Ici, T et V sont remplacés par String, rendant les deux versions de set() identiques.
Résultat :
Deuxième problème : L'effacement réduit les types en Objet.
void set(Object o) { // ... }
Cela élimine toute distinction entre T et V, rendant la surcharge impossible.
4. Pourquoi cela se produit-il ?
5. Solution : évitez les surcharges génériques
Pour résoudre l'ambiguïté, utilisez des noms différents pour les méthodes.
Exemple corrigé :
class MyGenClass<T, V> { T ob1; V ob2; void setOb1(T o) { ob1 = o; } void setOb2(V o) { ob2 = o; } }
Ici, setOb1() et setOb2() sont des méthodes distinctes, éliminant le conflit.
6. Conclusion
Des ambiguïtés comme celle-ci se produisent car l'effacement transforme les paramètres génériques en types simples (Objet).
Pour éviter les erreurs, suivez ces pratiques :
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!