gpt4 book ai didi

java - 修改后的 Collections.copy

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:31 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com