Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型,将一个列表复制到另一个列表_Java_List_Generics - Fatal编程技术网

Java泛型,将一个列表复制到另一个列表

Java泛型,将一个列表复制到另一个列表,java,list,generics,Java,List,Generics,我在java中有两个函数签名,它应该将列表src复制到列表dst: 1. public static <T> void copy1(List<T> dst, List<? extends T> src) 2. public static <T> void copy2(List<? super T> dst, List<? extends T> src) 1。public static void copy1(List dst

我在java中有两个函数签名,它应该将列表src复制到列表dst:

1. public static <T> void copy1(List<T> dst, List<? extends T> src)
2. public static <T> void copy2(List<? super T> dst, List<? extends T> src)

1。public static void copy1(List dst,List回答第一个问题,这两个函数签名在java中是否不同?否!测试这一点的最快方法是调用它们
copy
,并验证编译器是否抱怨重复的方法

public static <T> void copy(List<T> dst, List<? extends T> src)
public static <T> void copy(List<? super T> dst, List<? extends T> src)

公共静态无效副本(List dst,List你可能想看看这里:你应该看看List和List之间的区别你能显示第一个或第二个不起作用的地方吗?因为
t
不受任何约束,在你的情况下,我想不出有什么区别…如果一个有效,两者都应该起作用…如果你不考虑方法名的话,从编译器的角度来看,它们是相同的方法签名,这意味着它们不能同时被称为“复制”。当然,这并不意味着它们以相同的方式工作。
public static <T> void copy2(List<? super T> dst, List<? extends T> src) {
    // Copy
}

public static void main(String[] args) {
    List<Number> dst = new ArrayList<Number>();
    List<Integer> src = getSource();

    copy2(dst, src);  // Works when 2nd generic param type subclass of 1st
    copy2(dst, dst);  // Works when 2nd generic param type same as 1st
    copy2(src, dst);  // Invalid types for method!
}
public static <T> void copy1(List<T> dst, List<? extends T> src) {
    // Copy
}

public static void main(String[] args) {
    List<Number> dst = new ArrayList<Number>();
    List<Integer> src = getSource();

    copy1(dst, src);  // Works when 2nd generic param type subclass of 1st
    copy1(dst, dst);  // Works when 2nd generic param type same as 1st
    copy1(src, dst);  // Invalid types for method!
}