以下是代码:
public <K, T> Map<K, T> method1(Map<K, T> map, Class<T> entityClass){
//I need the Class instance of the actual type T here;
String name = entityClass.getClass().getName();
return map;
}
entityClass
中的method1
参数是多余的吗?我可以从传递给此函数的地图实例中获取该信息吗?
像这样:
public <K, T> Map<K, T> method2(Map<K, T> map){
//Can I get T's actual type without that additonal parameter `Class<T> entityClass` ?
//I think this information is alreay provided by the map instance passed in by the caller.
//But I don't know how or even whether it is possible.
return map;
}
答案 0 :(得分:1)
entityClass
参数是必需的。所有泛型类型信息在编译时都会被丢弃。 (这称为Type Erasure。)在编译器生成的字节码中,所有泛型类型都被其边界替换,如果它们是无界的,则由Object
替换(如K
和{{1在您发布的代码中。)
无法在运行时恢复此丢弃的信息。这就是在需要实际类型信息时总是使用额外类型参数(如T
)的原因。