当前位置: 代码迷 >> J2SE >> 很难的一个有关问题,慎入
  详细解决方案

很难的一个有关问题,慎入

热度:80   发布时间:2016-04-23 20:06:33.0
很难的一个问题,慎入
public static <T> void copy(List<T> dst, List<T> src)
public static <T> void copy(List<T> dst, List<? extends T> src)
public static <T> void copy(List<? super T> dst, List<T> src)
public static <T> void copy(List<? super T> dst, List<? extends T> src)
上面四个方法都可以实现复制功能,尤其是第三种方法感觉就已经完全可以了,为什么Java 容器采用的第四第种方法呢?
------解决思路----------------------
public static <T> void copy(List<? super T> dst, List<? extends T> src),这个更宽泛。参数传T可以,传T的子类也可以。可以这么说,就像套瓷娃娃,这个方法可以套在上面几个方法上面。上面几个方法只能在这个方法下面,不能套在这个方法上面。
------解决思路----------------------
我们把T记为1, ?派生类记为2,如果有两个? 则记为3

这4个函数,分别覆盖了
1 1
1 2
2 1
2 3
这4种情况。
1 1和2  3并不能互相取代。否则同为派生类,但是又不相同类型,则无法复制了。
------解决思路----------------------
泛型基础,看一下java泛型吧。
------解决思路----------------------
这个。
------解决思路----------------------
偶觉得大家想多了:
泛型的List<? super T> t1;
泛型List<? extends T> t2;

现在把t2 copy 到t1,1.2.3都不匹配,只能是4。
  相关解决方案