我正在使用类型对填充 HashMap 对象
<String, Class<Ancestor>>
,其中Ancestor
是一些自定义类。背后的想法是从微服务名称实例化一个对象。
我在这样输入时遇到编译错误:
已编辑
map.put("some label", Descendant.class);
很明显HashMap
类(class)期望真正的Ancestor
类而不是任何 Descendant
扩展类Ancestor
.
由于我有几十个不同的后代类(微服务),有人可以告诉我如何使用 HashMap 避免这种限制吗?
我尝试过使用Class<?>
而不是Class<Ancestor>
在 HashMap 声明中。但是,当调用微服务时,Eclipse 会发出强制转换警告
Class<Ancestor> a = (Class<Ancestor>) map.get("some label");
奇怪的警告说:
Type safety: unchecked cast from Class <capture#151-of ?> to Class <Ancestor>
最佳答案
您可以尝试将泛型参数设置为 Class
协变,通过使用 HashMap<String, Class<? extends Ancestor>>
.
并且您不应该转换 Class
你get
来自map
至Class<Ancestor>
,只需将其用作 Class<? extends Ancestor>
:
Class<? extends Ancestor> clazz = map.get("...");
关于java - 如何将 Class<后代> 传递到 Hashmap 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56377931/