如何将Class <descendant>传递到Hashmap中?

时间:2019-05-30 12:00:52

标签: java inheritance casting hashmap

我正在用一对类型的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>

1 个答案:

答案 0 :(得分:1)

您可以尝试使用Class使HashMap<String, Class<? extends Ancestor>>的通用参数协变。

您不应将Class的{​​{1}}从get投射到map,而应将其用作Class<Ancestor>

Class<? extends Ancestor>