Ich habe eine statische Funktion mit der folgenden Signatur für eine generische Art T
einen generischen Typs von einem generischen Typ in Java (kompilieren Zeitfehler) Herleitung
public static<T> List<T> sortMap(Map<T, Comparable> map)
, das eine Liste des Kartenschlüssels mit einer Eigenschaft zurückgeben sollte .
Jetzt möchte ich eine generische HashMap vom Typ S
Map<S,Double> map
in Aufruf innerhalb einer generischen Klasse die statische Funktion zu übergeben, die die Karte als Mitglied Variable hat.
Ich habe ein minimales Codebeispiel unten aufgelistet.
Allerdings bekomme ich eine Fehlermeldung (S
und T
sind sowohl T die aber in verschiedenen Bereichen meines Codes, das heißt T#1
= T
, T#2
= S
):
required: Map<T#1,Comparable>
found: Map<T#2,Double>
reason: cannot infer type-variable(s) T#1
(argument mismatch; Map<T#2,Double> cannot be converted to Map<T#1,Comparable>)
Wie dieses Problem beheben können? Ich bin überrascht, dass Java nicht erlaubt, einen generischen Typ von einem generischen Typ abzuleiten. Welche Struktur in Java kann man verwenden, um mit dieser Art von abstrakterer Code-Argumentation zu arbeiten?
-Code:
public class ExampleClass<T> {
Map<T, Double> map;
public ExampleClass() {
this.map = new HashMap();
}
//the following line produces the mentioned error
List<T> sortedMapKeys = UtilityMethods.sortMap(map);
}
public class UtilityMethods {
public static<T> List<T> sortMap(Map<T, Comparable> map) {
// sort the map in some way and return the list
}
}
zeigen Bitte den Klassencode das Publikum. –
'' static'' Methoden können nicht auf Membervariablen zugreifen; und welche Version von Java verwendest du? –
Ich denke, dass Sie mehr Code hinzufügen müssen, um das Problem zu verstehen. –