Java 重写方法和'List<;时的协变返回类型;T>';vs';列表<;?扩展T>';

Java 重写方法和'List<;时的协变返回类型;T>';vs';列表<;?扩展T>';,java,generics,bounded-wildcard,Java,Generics,Bounded Wildcard,直觉上(也是错误的)我认为List并不比List更专业化,为什么不编译呢列表是泛型中的列表类型擦除的一个子类型,这使得这不可能。在我看来,这就像编译器规范中的一个bug(或漏洞)。我认为不应该在Derived中声明不同类型的列表。嗯,派生的返回的列表类型更为允许,但它仍然是一个列表,所以可能规范说这足够兼容并允许它?@markspace但是列表是列表的一个子类型 class Base { <T> List<? extends T> f1() {

直觉上(也是错误的)我认为
List
并不比
List更专业化,为什么不编译呢<代码>列表
是泛型中的
列表类型擦除的一个子类型,这使得这不可能。在我看来,这就像编译器规范中的一个bug(或漏洞)。我认为不应该在
Derived
中声明不同类型的列表。嗯,
派生的
返回的列表类型更为允许,但它仍然是一个
列表
,所以可能规范说这足够兼容并允许它?@markspace但是
列表
列表的一个子类型
class Base {
    <T> List<? extends T>  f1() {
        return null;
    }
}

class Derived extends Base {

    <T> List<T>  f1() {   // fine !!! Not compile error.
        return null;
    }    
}
List<String> one = List.of("one");
List<? extends String> two = one;