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;