Heim >Web-Frontend >js-Tutorial >Mehrdeutigkeitsfehler bei Generika
1. Was sind Mehrdeutigkeitsfehler?
2. Beispiel für Mehrdeutigkeit: Erasure Overload
Problematischer Code:
class MyGenClass<T, V> { T ob1; V ob2; // Tentativa de sobrecarga void set(T o) { ob1 = o; } void set(V o) { ob2 = o; } }
Fehler: Der Versuch, die set()-Methode basierend auf den generischen Parametern T und V zu überladen, erscheint gültig, führt jedoch zu Mehrdeutigkeiten.
3. Gründe für Unklarheiten
Beispiel:
MyGenClass<String, String> obj = new MyGenClass<>();
Hier werden sowohl T als auch V durch String ersetzt, wodurch die beiden Versionen von set() identisch sind.
Ergebnis:
Zweites Problem: Durch Löschen werden Typen auf Objekte reduziert.
void set(Object o) { // ... }
Dadurch entfällt jegliche Unterscheidung zwischen T und V, wodurch eine Überladung unmöglich wird.
4. Warum passiert das?
5. Lösung: Vermeiden Sie generische Überlastung
Um die Mehrdeutigkeit zu beseitigen, verwenden Sie unterschiedliche Namen für die Methoden.
Korrigiertes Beispiel:
class MyGenClass<T, V> { T ob1; V ob2; void setOb1(T o) { ob1 = o; } void setOb2(V o) { ob2 = o; } }
Hier sind setOb1() und setOb2() unterschiedliche Methoden, wodurch der Konflikt beseitigt wird.
6. Fazit
Mehrdeutigkeiten wie diese treten auf, weil beim Löschen generische Parameter in einfache Typen (Objekt) umgewandelt werden.
Um Fehler zu vermeiden, befolgen Sie diese Vorgehensweisen:
Das obige ist der detaillierte Inhalt vonMehrdeutigkeitsfehler bei Generika. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!