gpt4 book ai didi

java - 泛型集合 PECS

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:14 26 4
gpt4 key购买 nike

我对这个方法有疑问来自 java.util.Collections :

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));
}
}

我了解如何 <? super T>有效,但是,我不明白为什么第一个参数是 List<? super T>而不是 List<T> .我认为它在这种情况下没用。
使用 List<T>应该也能正常工作,不是吗?
如果可能的话,你能给我一些例子来理解它吗?

谢谢。

最佳答案

不,这是有道理的。例如,考虑这种情况:

  • TInputStream
  • destList<Object>
  • srcList<FileInputStream>

那绝对没问题。当然,您可以制作T ObjectFileInputStream在这种情况下 - 但假设您正在调用这个来自 一个签名为:

的方法
public void doSomething(List<? super InputStream> streams) {
// I want to use copy in here for some reason
}

你不知道这是一个List<InputStream> - 只有它是 List<? super InputStream> .如果dest copy 中的参数只是 List<T> ,我们会被卡住……但是按照它的编写方式,我们没问题。

就我们对目标列表的要求而言,这也很有意义 - 我们只是需要能够设置 T 的值在里面。同样,我们对源列表的所有要求是我们可以获得 T 的值。从中。 <? super T><? extends T>很好地表达这些要求。

关于java - 泛型集合 PECS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856109/

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