gpt4 book ai didi

Java Generics - 类本身的子类?

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

我目前正在阅读 Java Generics,当涉及到通配符时我有点卡住了。

我从 Collections 类中得到了这个方法:

public void <T> copy(List<? super T> dest, List<? extends T> src) {
for(int i = 0; i < src.size(); i++) {
dest.set(i, src.get(i));
}
}

然后我被告知可以像这样调用方法:

List<Object> objs = new ArrayList<Object>();
List<Integer> ints = new ArrayList<Integer>();
Collections.copy(objs, ints);

由于类型参数已经交由编译器决定,书上说编译器选择类型参数为Integer。

但这怎么可能呢?

如果取为Integer,这意味着在方法声明中-
List<? extends T>将转换为 List<Integer extends Integer> .

这是一个错误,还是关于泛型有不同的规则?我四处搜索,大多数结果都说一个类不能是其自身的子类。

最佳答案

不,这不是错误。

? extends Integer 表示:任何是或扩展 Integer 的类(或实现 Integer,如果 Integer 是一个接口(interface))。

也一样吗? super Integer,这意味着:任何 Integer 类或者是 Integer 的父类(super class)或超接口(interface)。

关于Java Generics - 类本身的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441733/

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