gpt4 book ai didi

java - super 和 extends 的行为方式相同

转载 作者:太空宇宙 更新时间:2023-11-04 14:26:51 24 4
gpt4 key购买 nike

这个问题之前可能已经以不同的形式被问过,但我只是找不到合适的答案。

这些代码有什么区别:

第一个代码

ArrayList<? super Number> list=new ArrayList<>(Arrays.asList(1));

第二个代码

ArrayList<? extends Number> list=new ArrayList<>(Arrays.asList(1));

两条语句都编译。请说明为什么前者可以编译。它也显示了 Integer extends Number 和 Integer super Number。

编辑::

我期待的答案是: new ArrayList(Collection<? extends E>)因此它们都可以编译。

这样,这就不是重复的问题,因为引用的答案没有描述这一点。

最佳答案

<? super Number>意味着该类型是 Number 的任何父类(super class).

<? extends Number>意味着该类型是 Number 的任何子类.

它们会编译为相同的东西,但这取决于您实际上要对 List 执行什么类型.

如果您有 List<? super Number> ,您可以将任何 Number 放入其中,但编译器不能保证你从中得到的将是 Number 。而如果您有 List<? extends Number> ,那么你得到的任何东西肯定会继承自 Number .

如果尝试传递List<? super Number>,编译器将反对到一个期望 List<? extends Number> 的方法,因为前者可能包含不属于 Number 的内容。 .

如果尝试传递List<? extends Number>,编译器将反对到一个期望 List<? super Number> 的方法,因为前者不一定能接收后者可以接收的元素。

关于java - super 和 extends 的行为方式相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26576477/

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