在Java 1.8中工作時,需要在HashMap中確定K和V的類。 我的第一次嘗試沒有奏效,我承認我不知道該從哪裏出發。我希望能養活這個如何確定容器模板類
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>());
}
輸出:
Class :: HashMap
java.util.AbstractMap<K, V>
K
V
你看看:https://stackoverflow.com/questions/3403909/get-generic-type-of-class-at-runtime? –
感謝您的鏈接。除非我誤解了,否則當你知道已聲明的類時,這會起作用。我不能做像GenericClass(新的HashMap)。這會告訴我這是一個HashMap,我回到了原來的問題。 –
BAMF4bacon
另一個選擇是從地圖中獲取一些元素並在這些元素上調用'getClass',但不能保證那些元素具有'K'和'V'(可能是子類型)的確切類型。否則,這是不可能的。 –