Java 如何确定容器模板类
在Java1.8中工作时,我需要确定HashMap中的K和V类。 我的第一次尝试没有成功,我承认我不知道从这里走到哪里。我希望能养活这个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(
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
(可能是子类型)。否则这是不可能的。我在那里尝试了几种解决方案,但没有一种有效。我要说“不可能”,谢谢大家。我在那里尝试了几种解决方案,但没有一种有效。我要说“不可能”,谢谢大家。