【发布时间】:2018-09-19 09:07:41
【问题描述】:
我对这个编译错误感到困惑。考虑下面的代码sn-p,ConcreteClass1有如下编译错误:
错误:(16, 28) java: 不兼容的类型: java.util.Map java.lang.String,java.lang.String> 无法转换 到 java.util.Map java.lang.String,java.lang.Object>
然而ConcreteClass2 编译成功,仅仅是因为它扩展了AbstractClass 而不是AbstractClass<Object>。这是为什么呢?
abstract class AbstractClass<T extends Object> {
void testGenerics(Map<String, Object> map) {
}
}
class ConcreteClass1 extends AbstractClass<Object> {
public void testGenerics() {
Map<String, String> map = new HashMap<>();
super.testGenerics(map);
}
}
class ConcreteClass2 extends AbstractClass {
public void testGenerics() {
Map<String, String> map = new HashMap<>();
super.testGenerics(map);
}
}
【问题讨论】:
标签: java generics language-lawyer