HashMap<String, Boolean> myMap = new HashMap<String, Boolean>();
System.out.println(func1(myMap)); //should print "HashMap<String, Boolean>"
我想知道是否有这样的功能。此函数应该获取一个对象并返回该对象的确切类型。它应该适用于所有集合。
答案 0 :(得分:3)
这是不可能的,此信息在运行时不可用。 Java中存在“类型擦除”。 http://download.oracle.com/javase/1,5.0/docs/guide/language/generics.html
答案 1 :(得分:2)
泛型信息在运行时被删除。 println
在运行时运行。在运行时,地图只是一个HashMap。
答案 2 :(得分:2)
不幸的是,没有。
您可以使用反射找到它是HashMap,但由于类型擦除,您将无法找到类型参数。
来自Wikipedia:
在编译时检查泛型的类型正确性。然后在称为类型擦除的过程中移除泛型类型信息。例如,
List<Integer>
将转换为非泛型类型List
,它可以包含任意对象。编译时检查可确保生成的代码是类型正确的。由于类型擦除,无法在运行时确定类型参数。
答案 3 :(得分:0)
由于类型擦除,这是完全不可能的。在运行时,对象的类型参数将被擦除,并且仅在它们被使用时作为强制转换存在。如果它们是具体的,可以通过反射检索字段和方法的类型参数。
答案 4 :(得分:0)
如果地图至少有一个条目,则可以使用一个技巧 如下
Map<String, Boolean> map = new HashMap<String, Boolean>();
System.out.println(map.getClass().getName());
Set set = map.entrySet();
for (Object object : set) {
Map.Entry e = (Entry) object;
System.out.println(e.getKey().getClass());
System.out.println(e.getValue().getClass());
}