如何阻止编译器在map.get()抱怨?
“类型不匹配:无法从ClassInfo 转换为ClassInfo ”
class Context
{
final private Map<Class<?>,ClassInfo<?>> map = new HashMap<>();
<T> ClassInfo<T> getClassInfo(Class<T> c)
{
ClassInfo<T> ci = map.get(c);
if (ci == null) {
ci = new ClassInfo<T>(c);
map.put(c, ci);
}
return(ci);
}
}
一些更多的信息:
ClassInfo包含通过反射收集的有关Class的数据。
仅当使用Eclipse编译器时,JDK javac不会发生编译器错误。
最佳答案
我修复了在代码中添加()cast的问题:
导入java.util.HashMap;
导入java.util.Map;
class Context
{
private final Map<Class<?>,ClassInfo<?>> map = new HashMap<Class<?>,ClassInfo<?>>();
<T> ClassInfo<T> getClassInfo(Class<T> c)
{
@SuppressWarnings("unchecked")
ClassInfo<T> ci = (ClassInfo<T>) map.get(c);
if (ci == null) {
ci = new ClassInfo<T>(c);
map.put(c, ci);
}
return(ci);
}
}
但是请注意,强制转换通常很危险,只有在确实确定对象确实符合您的预期时,才应使用强制转换。
该解决方案的缺点是会产生警告,我不得不禁止它。希望能帮助到你!
关于java - 具有类 key 的Java HashMap泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20272106/