我正在使用类型为HashMap的对填充<String, Class<Ancestor>>对象,其中Ancestor是一些自定义类。背后的想法是从微服务名称中实例化一个对象。
我得到了一个编译错误,同时将如下所示:
编辑的
map.put("some label", Descendant.class);很明显,HashMap类需要一个真正的Ancestor类,而不是任何扩展Ancestor的Descendant类。
由于我有几十个不同的子类(microservices),有谁能告诉我们如何使用HashMap来避免这种限制?
我尝试在Class<?>声明中使用Class<Ancestor>而不是Class<Ancestor>。但是,Eclipse在召回微服务时会触发一个强制转换警告。
Class<Ancestor> a = (Class<Ancestor>) map.get("some label");奇怪的警告说:
Type safety: unchecked cast from Class <capture#151-of ?> to Class <Ancestor>发布于 2019-05-30 12:42:55
您可以使用一个Class来尝试使HashMap<String, Class<? extends Ancestor>>协变的泛型参数。
您不应该将Class you get从map转换为Class<Ancestor>,只需将其作为Class<? extends Ancestor>使用即可。
Class<? extends Ancestor> clazz = map.get("...");https://stackoverflow.com/questions/56377931
复制相似问题