【发布时间】:2020-04-07 10:48:37
【问题描述】:
我想要一个将类类型作为键的映射,以避免在访问值时进行强制转换。
更新
以下是您可以在 IDEA 中复制/粘贴并重现它的实际代码。
interface MyInterface {
}
class SomeConcreteClass implements MyInterface{
}
private Map<Class<?>, ? extends MyInterface> map = newMap();
private Map<Class<?>, ? extends MyInterface> newMap() {
Map<Class<?>, ? extends MyInterface> map = new HashMap<>();
map.put(SomeConcreteClass.class, new SomeConcreteClass());
return map;
}
private void accessMap() {
SomeConcreteClass clazz = (SomeConcreteClass) map.get(SomeConcreteClass.class); <== I want to avoid cast here
}
问题:这不能编译。我进入这一行:
map.put(SomeConcreteClass.class, new SomeConcreteClass());
错误:
第二个参数类型错误。发现:“需要一些具体的类”?延伸 我的界面`
我在这里做错了什么? SomeConcreteClass 应该被接受,因为它实现了接口
【问题讨论】:
-
请发布一个实际的非工作示例;您省略了一些重要的细节,例如访问修饰符和类结构。
-
@chrylis-onstrike- 这是一个实际的非工作示例,刚刚对其进行了测试,Idea 告诉我需要类型:捕获?扩展 MyInterface 提供:SomeConcreteClass
-
@chrylis-onstrike-:帖子中的代码,如果您将其复制/粘贴到 IDEA 中,您可以重现该问题。谢谢Artsiom