当前位置: 首页 > article >正文

Java 泛型<? extends Object>

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

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

通配符的使用

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

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

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

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

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

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

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> 不是
例如:

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

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

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

上述代码将无法编译。

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


http://www.kler.cn/a/527576.html

相关文章:

  • 基于遗传优化GRNN和Hog特征提取的交通标志识别算法matlab仿真
  • 【leetcode详解】T3175(一点反思)
  • 国产之光DeepSeek架构理解与应用分析
  • Teleporters( Educational Codeforces Round 126 (Rated for Div. 2) )
  • 赛博算卦之周易六十四卦JAVA实现:六幺算尽天下事,梅花化解天下苦。
  • 深入解析 C++17 中的 std::not_fn
  • 小程序-基础加强
  • 最新Java开发进阶!Java进阶面试资料无偿分享_java面试最新资料
  • SpringBoot入门:快速构建第一个Web应用
  • 需求分析应该从哪些方面来着手做?
  • 高低频混合组网系统中基于地理位置信息的信道测量算法matlab仿真
  • 手摸手系列之 DeepSeek-R1 开源大模型私有化部署解决方案
  • Linux_线程同步生产者消费者模型
  • 适合超多氛围灯节点应用的新选择
  • springboot 2.7.6 security mysql redis jwt配置例子
  • 【股票数据API接口36】如何获取股票当天逐笔大单交易数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • 仿真设计|基于51单片机的温室环境监测调节系统
  • C++实现状态模式
  • 如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景
  • python 语音识别
  • 如何在 Kafka 中实现自定义分区器
  • 27.Word:财务软件应用的书稿【10】
  • 数据结构与算法之二叉树: LeetCode LCP 10. 二叉树任务调度 (Ts版)
  • 记忆化搜索(5题)
  • 因果推断与机器学习—用机器学习解决因果推断问题
  • 为AI聊天工具添加一个知识系统 之80 详细设计之21 符号逻辑 之1