Class的泛型问题
例如:现在我有一个类Abc
有一个Map,Map<String, Class<? extends Abc>> mapping = new HashMap<String, Class<? extends Abc>>();
Class<?> c = Class.forName(className);
如果className这个类是继承了Abc的,那就会执行下面的代码
mapping.put("xxx", c); // 这里就是问题了
不知道有没有人看懂我的意思,当然,如果不用泛型的话就没有这么多“尘埃”了
------解决方案--------------------
由于泛型的编译期检查,如果不进行强制转换用平常的这样的写法是无法通过编译的。我们可以利用java泛型的只在编译期做检查的特点只要我们让编译器无法检查就行了,这种时候不用强转使用反射来调用put是最好的。
package test;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Map<String, Class<Test>> mapping = new HashMap<String, Class<Test>>();
String className = "xxx.xxx.xxx"; // 这里具体是什么并不重要
Class<?> c = Class.forName(className);
Method method=Map.class.getMethod("put",Object.class,Object.class);
method.invoke(mapping,"a",c);
System.out.println(mapping);
}
}