In Java 1.8 muss ich die Klasse von K und V in HashMap ermitteln. Mein erster Versuch hat nicht funktioniert, und ich gebe zu, ich habe keine Ahnung, wohin ich von hier aus gehen soll. Ich hoffe, dieseSo ermitteln Sie Containervorlagenklassen
public static int foo(Object obj){
int result = 0;
String x = obj.getClass().getSimpleName();
switch(x){
case "HashMap":
Type sooper = obj.getClass().getGenericSuperclass();
Type key = ((ParameterizedType)sooper).getActualTypeArguments()[ 0 ];
Type value = ((ParameterizedType)sooper).getActualTypeArguments()[ 1 ];
System.out.println(sooper.getTypeName());
System.out.println(key.getTypeName());
System.out.println(value.getTypeName());
break;
}
}
public static void main(String[] args) {
foo(new HashMap<Integer,Character>());
}
Ausgang zu füttern:
Class :: HashMap
java.util.AbstractMap<K, V>
K
V
Haben Sie sich angeschaut: https://stackoverflow.com/questions/3403909/get-generic-type-of-class-at-runtime? –
Danke für den Link. Wenn ich mich nicht irre, funktioniert das, wenn Sie die deklarierte Klasse kennen. Ich kann etwas wie GenericClass nicht machen (neue HashMap). Das würde mir sagen, dass es eine HashMap ist, und ich bin zurück zum ursprünglichen Problem. –
BAMF4bacon
Eine andere Möglichkeit besteht darin, einige Elemente aus der Map zu holen und 'getClass' für diese aufzurufen, aber es gibt keine Garantie, dass diese genau die Typen 'K' und' V' (könnte ein Subtyp sein) haben. Sonst ist es nicht möglich. –