首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类键的Java HashMap泛型

使用类键的Java HashMap泛型
EN

Stack Overflow用户
提问于 2013-11-29 01:46:19
回答 2查看 1.5K关注 0票数 1

如何在map.get()中停止编译器的报错?

“类型不匹配:无法从ClassInfo转换为ClassInfo”

代码语言:javascript
复制
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才不会出现编译器错误。

EN

回答 2

Stack Overflow用户

发布于 2013-11-29 01:55:36

我修复了向代码添加()强制转换的问题:

导入java.util.HashMap;导入java.util.Map;

代码语言:javascript
复制
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);
    }
}

但请注意,强制转换通常是危险的,只有在您确实确定对象确实是您所期望的对象时,才应该使用它们。

这个解决方案的缺点是它将创建一个警告,而我不得不抑制它。希望它能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2013-11-29 01:57:20

只需对其进行强制转换并使用:

代码语言:javascript
复制
@SuppressWarnings("unchecked")
ClassInfo<T> ci = (ClassInfo<T>) map.get(c);

确保将类型T放入散列映射中,否则可能会发生强制转换异常。

也就是说,如果T表示字符串,则map.get(c)应始终返回null或ClassInfo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20272106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档