我正在用一对类型的HashMap对象填充
<String, Class<Ancestor>>
,其中Ancestor
是一些自定义类。背后的想法是从微服务名称中实例化一个对象。
像这样放置时出现编译错误:
已编辑
map.put("some label", Descendant.class);
很明显HashMap
类期望一个真正的Ancestor
类,而不是扩展Descendant
的任何Ancestor
类。
由于我有数十种不同的后代类(微服务),因此有人能说出如何通过HashMap避免这种限制吗?
我尝试在HashMap声明中使用Class<?>
代替Class<Ancestor>
。但是,当调用微服务时,Eclipse会发出强制转换警告
Class<Ancestor> a = (Class<Ancestor>) map.get("some label");
奇怪的警告说:
Type safety: unchecked cast from Class <capture#151-of ?> to Class <Ancestor>
答案 0 :(得分:1)
您可以尝试使用Class
使HashMap<String, Class<? extends Ancestor>>
的通用参数协变。
您不应将Class
的{{1}}从get
投射到map
,而应将其用作Class<Ancestor>
:
Class<? extends Ancestor>