java - 如何将 Class<后代> 传递到 Hashmap 中?

标签 java inheritance casting hashmap

我正在使用类型对填充 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>> .

并且您不应该转换 Classget来自mapClass<Ancestor> ,只需将其用作 Class<? extends Ancestor> :

Class<? extends Ancestor> clazz = map.get("...");

关于java - 如何将 Class<后代> 传递到 Hashmap 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56377931/

相关文章:

swift 无法将类型 'Int' 的值分配给类型 'String'

java - mvn命令错误

java - 利用扫描仪填充对象数组列表

java - 如何在没有认证问题的情况下连接到 URL?

Java 数组删除会产生意想不到的结果?

java - 由于层次结构中的抽象类,使用反射的递归方法调用失败

转换 NULL 指针

python-3.x - 允许 super 控制子类上的 __setattr__

c++ - 继承接口(interface)实现

mysql - 防止 mysql 在 where 子句中将字符串转换为 int