Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定容器模板类_Java_Class_Templates - Fatal编程技术网

Java 如何确定容器模板类

Java 如何确定容器模板类,java,class,templates,Java,Class,Templates,在Java1.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(

在Java1.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>());
}
publicstaticintfoo(objectobj){
int结果=0;
字符串x=obj.getClass().getSimpleName();
开关(x){
案例“HashMap”:
类型sooper=obj.getClass().getGenericSuperclass();
类型键=((ParameteredType)sooper.getActualTypeArguments()[0];
类型值=((ParameteredType)sooper.getActualTypeArguments()[1];
System.out.println(sooper.getTypeName());
System.out.println(key.getTypeName());
System.out.println(value.getTypeName());
打破
}
}
公共静态void main(字符串[]args){
foo(新HashMap());
}
输出:

Class ::    HashMap
java.util.AbstractMap<K, V>
K
V
Class::HashMap
java.util.AbstractMap
K
v

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


我在这里做了一些查找,找到了一个丑陋但有效的问题解决方案。

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


我在这里做了一些查找,找到了一个丑陋但有效的问题解决方案。

我自己解决了这个问题,使用枚举类型并将其作为参数传递给我的函数,因为函数调用方知道本例中的类。

我自己解决了这个问题,使用枚举类型并将其作为参数传递给我的函数,因为函数调用方知道本例中的类。

是否查看:?感谢链接。除非我弄错了,否则当您知道所声明的类时,这是有效的。我不能做像GenericClass(新HashMap)这样的事情。这会告诉我这是一个HashMap,我回到了原来的问题。另一个选项是从映射中获取一些元素,并对这些元素调用
getClass
,但不能保证它们是确切的类型
K
V
(可能是子类型)。否则这是不可能的。你看了吗:?谢谢链接。除非我弄错了,否则当您知道所声明的类时,这是有效的。我不能做像GenericClass(新HashMap)这样的事情。这会告诉我这是一个HashMap,我回到了原来的问题。另一个选项是从映射中获取一些元素,并对这些元素调用
getClass
,但不能保证它们是确切的类型
K
V
(可能是子类型)。否则这是不可能的。我在那里尝试了几种解决方案,但没有一种有效。我要说“不可能”,谢谢大家。我在那里尝试了几种解决方案,但没有一种有效。我要说“不可能”,谢谢大家。