这是集合复制方法(它的一部分):
public static <T> void copy(List<? super T> dst, List<? extends T> src) {
for (int i = 0; i < src.size(); i++) {
dst.set(i, src.get(i));
}
}
有 4 个示例调用:
List<Object> objs = Arrays.<Object>asList(2, 3.14, "four");
List<Integer> ints = Arrays.asList(5, 6);
1. Collections.copy(objs, ints);
2. Collections.<Object>copy(objs, ints);
3. Collections.<Number>copy(objs, ints);
4. Collections.<Integer>copy(objs, ints);
上面的电话是如何工作的?
我们也可以用几个可能的签名来声明方法
1. public static <T> void copy(List<T> dst, List<T> src)
2. public static <T> void copy(List<T> dst, List<? extends T> src)
3. public static <T> void copy(List<? super T> dst, List<T> src)
4. public static <T> void copy(List<? super T> dst, List<? extends T> src)
对于上面的示例调用,
其中第一个限制性太强,因为它只允许在目标和源具有完全相同的类型时调用。(了解)。
仅当类型参数为 Object 时,第二个签名才有效
第三个签名仅在类型参数为 Integer 时有效
最后一个签名适用于所有三个类型参数,即 Object、Number 和 Integer。
请解释第二个,第三个和最后一个签名吗?
其余三个对于使用隐式类型参数的调用是等效的,但对于显式类型参数是不同的。
上面这句话是什么意思?