gpt4 book ai didi

java - 具体类不使用通用标识符编译

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:01 25 4
gpt4 key购买 nike

这个编译错误让我百思不得其解。考虑下面的代码片段,ConcreteClass1有以下编译错误:

Error:(16, 28) java: incompatible types: java.util.Map java.lang.String,java.lang.String> cannot be converted to 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);
}
}

最佳答案

ConcreteClass2由于省略了通用信息,因此被声明为原始类型。根据 official Raw Types tutorial :

Raw types show up in legacy code because lots of API classes (such as the Collections classes) were not generic prior to JDK 5.0. When using raw types, you essentially get pre-generics behavior

因为以上testGenerics(Map<String, Object> map)被解释为 testGenerics(Map map)它可以用任何 Map 调用目的。这一切都是因为与 Java 5 之前的代码向后兼容。

可以看看JLS 4.8 Raw Types .

关于java - 具体类不使用通用标识符编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52402140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com