关于 copy() 方法的定义和使用的一点疑问
Topic source在调用copy方法时,T是不是以传递的第一个参数的实际类型为准?第一个参数确定了T的实际类型,第二个参数就需要是继承自T或是T的子类
这个不对,我调换了两个参数的顺序,还是能正常执行的
把Integer带入T也是满足条件的
static <Integer> void copy(List<Number> dest, List<Integer> src),只要满足参数设定的泛型类型就可带入
我学到这里时,也有这个疑问,想了两天,我认为应该这样理解,如果传入的两个参数是同一个类型,那么肯定满足条件,如果不同的话,第一个泛型必须是T的父类,第二个泛型必须是T的子类,画个图很好明白,这样第一个肯定是第二个的父类,你要是List<Integer> 和List<Number>反过来,条件就不成立,所以编译就报错
- 1
日落有星
上文有说到:copy() 是一个静态泛型方法,在 Collections 类中这么定义
那么使用过程中这个 T 要怎么确定? 其中怎样的类型可以通过 List<? super T> dest 和 List<? extends T> src ?
比如下面:
此时的 copy() 方法,它的 T 应该是算什么类型? Number 还是 Integer?
List<Number> 类型可以通过 List<? super T>,List<Integer> 类型可以通过 List<? extends T>,反过来却不行。
因为上一章节讲 extends 后面都是确定的类型,比如 <? extends Number>。
但这里的 T 是什么类型呢?又是由什么确定的呢?