很难的一个问题,慎入

wyc_ 2014-12-02 08:15:45
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 容器采用的第四第种方法呢?
...全文
450 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyc_ 2014-12-03
  • 打赏
  • 举报
回复
引用 10 楼 t_jl1979 的回复:
偶觉得大家想多了: 泛型的List<? super T> t1; 泛型List<? extends T> t2; 现在把t2 copy 到t1,1.2.3都不匹配,只能是4。
你说的这个第三个函数就可以啊
冥王之锤 2014-12-03
  • 打赏
  • 举报
回复
偶觉得大家想多了: 泛型的List<? super T> t1; 泛型List<? extends T> t2; 现在把t2 copy 到t1,1.2.3都不匹配,只能是4。
wyc_ 2014-12-03
  • 打赏
  • 举报
回复
我个人认为第四个方法完全包含了前面三种方法,这可能就是Java类库采用这种方法的唯一原因吧,我应该是想多了,这里可能不涉及到向后兼容的问题。
tony4geek 2014-12-03
  • 打赏
  • 举报
回复
树成 2014-12-03
  • 打赏
  • 举报
回复
泛型基础,看一下java泛型吧。
wyc_ 2014-12-02
  • 打赏
  • 举报
回复
谁能给出一个例子,使的第3个函数不可以,但是第4个函数可以的。。。
wyc_ 2014-12-02
  • 打赏
  • 举报
回复
引用 3 楼 healer_kx 的回复:
我们把T记为1, ?派生类记为2,如果有两个? 则记为3 这4个函数,分别覆盖了 1 1 1 2 2 1 2 3 这4种情况。 1 1和2 3并不能互相取代。否则同为派生类,但是又不相同类型,则无法复制了。
谢谢,说出了一个很重要的原因
wyc_ 2014-12-02
  • 打赏
  • 举报
回复
引用 2 楼 mousepc228891 的回复:
public static <T> void copy(List<? super T> dst, List<? extends T> src),这个更宽泛。参数传T可以,传T的子类也可以。可以这么说,就像套瓷娃娃,这个方法可以套在上面几个方法上面。上面几个方法只能在这个方法下面,不能套在这个方法上面。
谢谢,你说的这个是正确的,我是知道的。
healer_kx 2014-12-02
  • 打赏
  • 举报
回复
我们把T记为1, ?派生类记为2,如果有两个? 则记为3 这4个函数,分别覆盖了 1 1 1 2 2 1 2 3 这4种情况。 1 1和2 3并不能互相取代。否则同为派生类,但是又不相同类型,则无法复制了。
ChangeZ_ 2014-12-02
  • 打赏
  • 举报
回复
public static <T> void copy(List<? super T> dst, List<? extends T> src),这个更宽泛。参数传T可以,传T的子类也可以。可以这么说,就像套瓷娃娃,这个方法可以套在上面几个方法上面。上面几个方法只能在这个方法下面,不能套在这个方法上面。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧