gpt4 book ai didi

java - 重写方法时的协变返回类型和 `List' 与 'List'

转载 作者:行者123 更新时间:2023-11-30 10:03:49 25 4
gpt4 key购买 nike

直觉上(但错误地)我认为 List<T>不比 List<? extends T> 更专业所以下面不应编译(因为返回类型协方差要求 Derived 中的返回类型与 Base 中的返回类型相同或子类型) - 但它编译!如果我们改变方法的位置,我(错误地)期望它能够编译。

但是为什么这有效的严格(和正确)推理是什么?

class Base {
<T> List<? extends T> f1() {
return null;
}
}

class Derived extends Base {

<T> List<T> f1() { // fine !!! Not compile error.
return null;
}
}

此外,我误解了一些东西 - 两种方法都有 <T> - 所以这两个 T 可能会有所不同 T

最佳答案

为什么这不能编译? List<T> List<? extends T> 的子类型,即编译得很好:

List<String> one = List.of("one");
List<? extends String> two = one;

也有人说,有界类型的通配符使类型协变。

关于java - 重写方法时的协变返回类型和 `List<T>' 与 'List<? extends T>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56200426/

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