如何阻止编译器在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/

10-12 02:42