我对此方法有疑问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));
}
}
Run Code Online (Sandbox Code Playgroud)
我知道如何<? super T>工作,但是,我不明白为什么第一个参数List<? super T>代替List<T>.我认为在这种情况下它没用.
使用也List<T>应该工作,不应该吗?
如果可能的话,你能给我一些例子来理解吗?
谢谢.
不,这很有道理.例如,考虑这种情况:
T 是 InputStreamdest 是一个 List<Object>src 是一个 List<FileInputStream>这非常好.当然,你可以做T任何Object或FileInputStream在这种情况下-但是想象一下,你在调用这个来自与一个签名的方法:
public void doSomething(List<? super InputStream> streams) {
// I want to use copy in here for some reason
}
Run Code Online (Sandbox Code Playgroud)
你不知道它是List<InputStream>- 只是它是一个List<? super InputStream>.如果dest在参数copy均只是 List<T>,我们就被卡住......但它的方式是写的,我们很好.
从目的地列表中我们需要的内容也是有意义的 - 我们只需要能够设置其中的值T.同样,我们对源列表的要求是我们可以从中获取值T.<? super T>并<? extends T>很好地表达这些要求.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |