如何在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包含有关类的数据,通过反射收集。
只有在使用Eclipse编译器时,JDK javac才不会出现编译器错误。
发布于 2013-11-29 01:55:36
我修复了向代码添加()强制转换的问题:
导入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);
}
}但请注意,强制转换通常是危险的,只有在您确实确定对象确实是您所期望的对象时,才应该使用它们。
这个解决方案的缺点是它将创建一个警告,而我不得不抑制它。希望它能帮上忙!
发布于 2013-11-29 01:57:20
只需对其进行强制转换并使用:
@SuppressWarnings("unchecked")
ClassInfo<T> ci = (ClassInfo<T>) map.get(c);确保将类型T放入散列映射中,否则可能会发生强制转换异常。
也就是说,如果T表示字符串,则map.get(c)应始终返回null或ClassInfo
https://stackoverflow.com/questions/20272106
复制相似问题