Java泛型,将一个列表复制到另一个列表
我在java中有两个函数签名,它应该将列表src复制到列表dst: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
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!
}