gpt4 book ai didi

java - 难以理解 Java 中的通配符

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

我很难理解 Java 泛型中的通配符。具体我有以下问题:

  1. 如果我们有一个 LinkedList<?> , 为什么我们不能添加 Object到吗?我知道它不知道列表的类型,但不会添加 Object在任何情况下我们都涵盖了吗?

  2. 类似于上面的问题,如果我们有LinkedList<? extends Number> ,为什么我们不能add一个Number到吗?

  3. 最后,如果我们有LinkedList<? super Number> ,为什么我们可以add一个Integer到列表中,难道我们不应该只能添加 Number 的父类(super class)吗?

我想我是想了解通配符一般是如何工作的,我已经阅读了有关通配符的 Oracle 教程以及其他一些内容,但我想我不明白为什么它们会起作用。

最佳答案

你混淆了对象和类型。
与简单的泛型参数不同,通配符描述了泛型参数的类型
List<? super Number>不是 Number 的父类(super class)列表;它是一些未知类型的列表,其中该类型是数字的父类(super class)。

A LinkedList<?>可能是 LinkedList<Car> .
Object不是 Car , 你不能添加 Object

事实上,由于您对列表包含的类型一无所知,因此无法向其中添加任何内容。 (null 除外)

类似地,一个LinkedList<? extends Number>可能是 List<Long> , 所以你不能添加 Integer给它。 (因为 Integer 不是 Long )

另一方面,List<? super Number>绝对允许包含 Number或任何派生类,因为它只能是 Number 之一的列表的父类(super class)(例如,List<Object>)

关于java - 难以理解 Java 中的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22359772/

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