在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'(可能是子类型)的确切类型。否则,这是不可能的。 –