gpt4 book ai didi

java - `copy(List dest, List src) ` 和 `copy(List dest, List src)` 之间的差异

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:08 25 4
gpt4 key购买 nike

我正在尝试通过阅读以下内容来学习 Java 泛型通配符: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#FAQ103

Material 中有一个例子:

public class Collections { 
public static <T> void copy (List<? super T> dest, List<? extends T> src) {
for (int i=0; i<src.size(); i++)
dest.set(i,src.get(i));
}
}

我想知道我是否可以按如下方式更改方法签名:

  public static <T> void copy(List<? super T> dest, List<? extends T> src) {

  public static <T> void copy(List<T> dest, List<? extends T> src) {

这两种方法签名之间有什么区别吗?

示例将不胜感激。

最佳答案

你是对的。在这种情况下,两个参数的类型参数用于表达 dest 的关系。必须包含 src 中对象的父类(super class)型对象.因此,如果你说 src包含 <? extends T>那么说 dest 就足够了包含 T 的对象。

也可以反过来表达,即:

List<? super T> dest, List<T> src

同样的效果。

编辑:我怀疑作者要强调关于 PECS principle 的观点

关于java - `copy(List<? super T> dest, List<? extends T> src) ` 和 `copy(List<T> dest, List<? extends T> src)` 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34985220/

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