gpt4 book ai didi

java - 无界通配符类型仅用于创建引用吗?

转载 作者:行者123 更新时间:2023-12-02 07:02:08 26 4
gpt4 key购买 nike

我见过很多案例,其中? type 仅用于创建引用。而且我们无法添加除 null 之外的任何对象。那么,使用“?”只是为了创建引用吗?

此外,提供添加空值的选项有什么必要/用途?他们可以简单地实现而不使用 add() 方法,对吧?有什么理由可以选择将 null 添加到 List < 中? > ?

最佳答案

List是一个泛型接口(interface),无论泛型类型如何,接口(interface)都是相同的。因此,所有实现者都需要重新定义其中的所有方法。至于能够将 null 添加到“无界”列表中,与其说是方法问题,不如说是尊重接口(interface)的必要条件:

未绑定(bind)的泛型通配符允许将对 List(或其他泛型类)的引用传递给方法,而无需了解它将包含的特定类型的编译时知识。然而,泛型的契约(Contract)仍然必须得到尊重。这对于读取操作来说不会造成大问题,因为列表中的任何内容都将始终(也)是一个java.lang.Object。另一方面,插入操作几乎是不可能的,因为缺乏有关可接受类型的信息,因此无法接受任何类型 - 例如List 只能接受字符串,但 Object 可以是其他任何东西 - 例如数字,因此无法安全地接受。

Null 可以安全地工作,因为(假设列表接受 null 值),它将是放入列表中始终有效的唯一值(null 可以是转换为任何有效类型)。

编辑:自从我注意到我实际上并没有回答你的问题:是的,<?>通配符(以及扩展形式 <? extends X><? super X> 仅在定义引用时有效,并且不能在泛型实例化中使用。

关于java - 无界通配符类型仅用于创建引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16516610/

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