首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Class<Descendant>传递给哈希映射?

如何将Class<Descendant>传递给哈希映射?
EN

Stack Overflow用户
提问于 2019-05-30 12:00:52
回答 1查看 43关注 0票数 1

我正在使用类型为HashMap的对填充<String, Class<Ancestor>>对象,其中Ancestor是一些自定义类。背后的想法是从微服务名称中实例化一个对象。

我得到了一个编译错误,同时将如下所示:

编辑的

代码语言:javascript
复制
map.put("some label", Descendant.class);

很明显,HashMap类需要一个真正的Ancestor类,而不是任何扩展AncestorDescendant类。

由于我有几十个不同的子类(microservices),有谁能告诉我们如何使用HashMap来避免这种限制?

我尝试在Class<?>声明中使用Class<Ancestor>而不是Class<Ancestor>。但是,Eclipse在召回微服务时会触发一个强制转换警告。

代码语言:javascript
复制
Class<Ancestor> a = (Class<Ancestor>) map.get("some label");

奇怪的警告说:

代码语言:javascript
复制
Type safety: unchecked cast from Class <capture#151-of ?> to Class <Ancestor>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-30 12:42:55

您可以使用一个Class来尝试使HashMap<String, Class<? extends Ancestor>>协变的泛型参数。

您不应该将Class you getmap转换为Class<Ancestor>,只需将其作为Class<? extends Ancestor>使用即可。

代码语言:javascript
复制
Class<? extends Ancestor> clazz = map.get("...");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56377931

复制
相关文章

相似问题

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