Java 泛型<? extends Object>

news/2025/2/3 22:59:35 标签: java, python, 开发语言

在 Java 泛型中,<? extends Object> 和 <?> 都表示未知类型,但它们在某些情况下有细微的差异。泛型的引入是为了消除运行时错误并增强类型安全性,使代码更具可读性和可维护性。

在 JDK 5 中引入了泛型,以消除编译时错误并加强类型安全性。这种额外的类型安全性消除了某些用例中的强制转换,并使程序员能够编写泛型算法,从而生成更具可读性的代码

通配符的使用

通配符在泛型中用来表示未知类型。它可以有三种形式:

  • 无界通配符:List<?> 表示未知类型的列表。

  • 上界通配符:List<? extends Number> 表示 Number 或其子类型(如 Integer 和 Double)的列表。

  • 下界通配符:List<? super Integer> 表示 Integer 或其超类型 Number 和 Object 的列表。

<?> 和 <? extends Object> 的相同之处

在大多数情况下,<?> 和 <? extends Object> 是相同的。例如,以下两个方法的行为是相同的:

java">public static void printListWildCard(List<?> list) {
	for (Object element : list) {
		System.out.print(element + " ");
	}
}

public static void printListWildCard(List<? extends Object> list) {
	for (Object element : list) {
		System.out.print(element + " ");
	}
}

这两个方法都可以处理 List。

<?> 和 <? extends Object> 的不同之处

虽然在大多数情况下它们是相同的,但在某些情况下它们有细微的差异。一个显著的区别是 <?> 是可重构的,而 <? extends Object> 不是
例如:

java">List<?> someList = new ArrayList<>();
boolean instanceTest = someList instanceof List<?>;

上述代码可以编译并且 instanceTest 为 true。但是,如果使用 <? extends Object>:

java">List<? extends Object> anotherList = new ArrayList<>();
boolean instanceTest = anotherList instanceof List<? extends Object>;

上述代码将无法编译。

虽然 <?> 和 <? extends Object> 在大多数情况下是相同的,但在可重构性方面存在细微差异。


http://www.niftyadmin.cn/n/5841097.html

相关文章

unity免费资源2025-2-2

https://assetstore.unity.com/packages/vfx/particles/fire-explosions/fireworks-effect-2d-227132 零元购 CARTOONVFX9X

【Block总结】门控轴向注意力Gated Axial-Attention|即插即用

论文信息 标题: Medical Transformer: Gated Axial-Attention for Medical Image Segmentation 论文链接: https://arxiv.org/pdf/2102.10662 GitHub链接: https://github.com/jeya-maria-jose/Medical-Transformer 创新点 门控轴向注意力机制: 该机制通过引入可学习的门控参…

word2vec 实战应用介绍

Word2Vec 是一种由 Google 在 2013 年推出的重要词嵌入模型,通过将单词映射为低维向量,实现了对自然语言处理任务的高效支持。其核心思想是利用深度学习技术,通过训练大量文本数据,将单词表示为稠密的向量形式,从而捕捉单词之间的语义和语法关系。以下是关于 Word2Vec 实战…

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群 简介Kubernetes 的工作流程概述Kubernetes v1.29.13 版本Ubuntu 22.04 系统安装部署 Kubernetes v1.29.13 集群 1 环境准备1.1 集群IP规划1.2 初始化步骤&#xff08;各个节点都需执行&#xff09;1.2.1 主机名与IP地址解析1.…

TypeScript 运算符

TypeScript 运算符 TypeScript 作为 JavaScript 的超集,在 JavaScript 的基础上增加了静态类型系统,使得开发大型应用更加容易和维护。在 TypeScript 中,运算符是执行特定数学或逻辑运算的符号。本文将详细介绍 TypeScript 中常见的运算符,并对其使用方法进行详细阐述。 …

GPIO配置通用输出,推挽输出,开漏输出的作用,以及输出上下拉起到的作用

通用输出说明&#xff1a; ①输出原理&#xff1a; 对输出数据寄存器的对应位写0 或 1&#xff0c;就可以控制对应编号的IO口输出低/高电平 ②输出类型 推挽输出&#xff1a;IO口可以输出高电平&#xff0c;也可以输出低电平 开漏输出&#xff1a;IO口只能输出低电平 所以…

Haskell语言的多线程编程

Haskell语言的多线程编程 Haskell是一种基于函数式编程范式的编程语言&#xff0c;以其强大的类型系统和懒惰求值著称。近年来&#xff0c;随着多核处理器的发展&#xff0c;多线程编程变得日益重要。虽然Haskell最初并不是为了多线程而设计&#xff0c;但它的设计理念和工具集…

在 Ubuntu 中使用 FastAPI 创建一个简单的 Web 应用程序

FastAPI 是一个现代、快速且基于 Python 的 Web 框架&#xff0c;特别适合构建 API。本文将指导你如何在 Ubuntu 系统中安装 FastAPI 并创建一个简单的“Hello World”应用。 1. 安装必要的软件和依赖 在开始之前&#xff0c;请确保你的系统已经安装了以下工具&#xff1a; P…