在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
答案 0 :(得分:0)
通常,由于类型擦除,您将无法检索K和V的类型。创建模板对象后,系统不会将其视为
<unique_type K, unique_type V>
反而
<Object K, Object V>
我做了一些观察,发现another question在这里提供了一个丑陋但有效的解决方案。
答案 1 :(得分:0)
我通过使用Enum类型并将其作为参数传递给我的函数来解决这个问题,因为在这种情况下函数调用者知道了类。