小编joo*_*dr_的帖子

Java 类型擦除:为什么以下代码段不能编译?

我目前正在准备我的 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>) 具有相同的擦除,但都不覆盖另一个

我在这里缺少什么?

java oop generics compiler-errors

2
推荐指数
1
解决办法
72
查看次数

标签 统计

compiler-errors ×1

generics ×1

java ×1

oop ×1