我目前正在准备我的 Java SE 11 开发人员证书,我似乎无法理解类型擦除的概念。我有以下课程:
public class BaseClass {
public List<? extends CharSequence> transform(Set<? extends CharSequence> set) {
return null;
}
}
public class SubClass extends BaseClass {
@Override
public List<String> transform(Set<String> set) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
据我了解,类型擦除会将方法签名变成以下内容:
public List<? extends CharSequence> transform(Set set) {
return null;
}
public List<String> transform(Set set) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎是一个有效的覆盖。但是,当我编译程序时,出现以下错误:
名称冲突: covariant.car.SubClass 中的 transform(java.util.Set<java.lang.String>) 和 covariant.car.BaseClass 中的 transform(java.util.Set<? extends java.lang.CharSequence>) 具有相同的擦除,但都不覆盖另一个
我在这里缺少什么?