Collections.copy
定义为:
public static <T> void copy(List<? super T> dest, List<? extends T> src)
我了解它的工作原理并且没有任何问题。我尝试编写另一种方式来展示与以下内容相同的内容:
public static <T, E extends T> void copy(List<T> dest, List<E> src){
for(E e: src){
dest.add(e);
}//ignore implementation. it has flaws. The focus is declaration of copy
}
这个想法很简单。对于从源读取的任何类型,目标类型都应该是它的父类(super class)型。所以现在你可以这样做:
copy(new ArrayList<Number>(), new ArrayList<Number>());
copy(new ArrayList<Number>(), new ArrayList<Integer>());
copy(new ArrayList<Object>(), new ArrayList<Number>());
copy(new ArrayList<Object>(), new ArrayList<Double>());
看起来不错。但是与实际 Collections.copy 相比,以上是否有任何缺陷? ?从类型信息的角度来看,有什么地方实际比上面的好吗?
最佳答案
我认为原始版本更好的一个地方是简洁。特别是从代码生成的角度来看。
如果我调用完整声明的原始函数,我可以
Collections.<Object>copy(new ArrayList<Object>(), new ArrayList<Number>());
在我的例子中是:
MyClass.<Object, Number> copy(new ArrayList<Object>(), new ArrayList<Number>());
所以它更简洁一些。
关于java - 修改后的 Collections.copy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28540345/