如何确定Container模板类

时间:2017-06-01 12:06:13

标签: java class templates

在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

2 个答案:

答案 0 :(得分:0)

通常,由于类型擦除,您将无法检索K和V的类型。创建模板对象后,系统不会将其视为 <unique_type K, unique_type V> 反而 <Object K, Object V>

我做了一些观察,发现another question在这里提供了一个丑陋但有效的解决方案。

答案 1 :(得分:0)

我通过使用Enum类型并将其作为参数传递给我的函数来解决这个问题,因为在这种情况下函数调用者知道了类。