Statische Methode Überladung mit Generika

8

Wo ich versuche zwei statische Überlademethoden zu erstellen, habe ich einen Kompilierungsfehler bekommen. Kann jemand das erklären

%Vor%     
asela38 05.10.2010, 06:20
quelle

3 Antworten

14

Der Grund ist Löschvorgang . Generics werden nicht in den Klassen gespeichert, sie sind nur Informationen zur Kompilierung, daher sind beide Methoden zur Laufzeit identisch und daher gibt es einen Namenskonflikt.

Referenz

Diese drei Methoden sind tatsächlich identisch (lesen: sie erzeugen einen identischen Bytecode):

%Vor%

Wenn Sie wirklich zwei separate Methoden haben möchten, müssen Sie verschiedene Methodensignaturen angeben (z. B. unterschiedliche Methodennamen, einen zusätzlichen Parameter für eine der Methoden usw.).

    
Sean Patrick Floyd 05.10.2010, 06:25
quelle
1

Aus der Sicht der Methoden sind die Parameter Set<String> und Set<Map<String,String>> identisch, da alle Instanzen einer generischen Klasse die gleiche Laufzeitklasse haben (in Ihrem Fall gesetzt), unabhängig von ihren tatsächlichen Typparametern . Daher erhalten Sie erasure error . Auch zur Laufzeit werden beide aussehen ... public static void a(Set stringSet) {} UND public static void a(Set mapSet) {}

    
Favonius 05.10.2010 06:32
quelle
0

Sie haben den Compilerfehler erhalten, weil die Methoden nicht richtig überladen sind. Beide Methoden haben einen Parameter vom Set-Typ, der beide Methoden für den Compiler identisch macht.

    
Amit 05.10.2010 06:42
quelle

Tags und Links