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

List<?>和List<Object>区别

List<?>和 List<Object> 是两种在 Java 中用于表示泛型集合的方式,但它们有不同的含义和用法。下面是这两者之间的区别:

1. List<?>

List<?> 是通配符类型(Wildcard Type)的一种表示方式。`?` 表示可以是任何类型,但无法对其进行操作,例如获取或设置元素的类型。

特点:
`List<?>` 表示一个类型未知的 `List`,其中元素的类型可以是任意的(例如 `List<Integer>`、`List<String>` 等)。
- 只能从 `List<?>` 中读取元素,但无法向其中添加元素(除了 `null`)。

import java.util.List;
import java.util.ArrayList;public class WildcardExample {public static void main(String[] args) {List<?> list1 = new ArrayList<String>();  // 可以是任意类型的 ListList<?> list2 = new ArrayList<Integer>();// 你可以读取元素,但不能添加非 null 的元素Object obj = list1.get(0);  // 获取元素,返回类型为 Object// 以下行会报错,因为不能向 List<?> 中添加元素// list1.add("Hello");   // 编译错误// list1.add(10);        // 编译错误}
}

2. List<Object>

`List<Object>` 是一个具体的类型参数,它表示一个可以包含任意类型的对象的 `List`。由于所有 Java 类(包括自定义类)都继承自 `Object`,所以 `List<Object>` 可以存储任何类型的元素。
- `List<Object>` 是一个 `List`,其中的元素必须是 `Object` 或其子类(即任何对象)。
- 你可以向 `List<Object>` 添加任何类型的元素,甚至是 `null` 或者不同类型的对象。

import java.util.List;
import java.util.ArrayList;public class ObjectListExample {public static void main(String[] args) {List<Object> list = new ArrayList<>();list.add("Hello");  // 添加一个 Stringlist.add(10);       // 添加一个 Integerlist.add(3.14);     // 添加一个 Double// 可以从 list 中获取任何类型的元素,但需要进行类型转换Object obj1 = list.get(0);  // 返回 Object 类型,需要强制转换String str = (String) obj1; // 需要类型转换System.out.println(str);     // 输出 "Hello"}
}

http://www.xdnf.cn/news/20196.html

相关文章:

  • 第二阶段WinForm-12:UI控件库
  • 力扣516 代码随想录Day16 第一题
  • 【涂鸦T5】6. lvgl显示光感数值
  • 鸿蒙:AppStorageV2状态管理和数据共享
  • Gmail 数据泄露安全警报以及启示
  • 【Linux】线程概念与控制
  • 代码随想录刷题Day49
  • house (ai)
  • 对话Michael Truell:23岁创立Cursor,与Github Copilot竞争
  • 【C++上岸】C++常见面试题目--算法篇(第十九期)
  • 2025年8月文章一览
  • 深度学习:自定义数据集处理、数据增强与最优模型管理
  • 数据旁路(Data Bypassing)是什么?
  • 安装3DS MAX 2026后,无法运行,提示缺少.net core的解决方案
  • 2025年数学建模国赛C题第二版本超详细解题思路
  • Qwen-agent 核心功能分析学习
  • 从零开始学无监督学习:图像混合与标签平滑技术详解,收藏不走丢
  • C++开发中的常用设计模式:深入解析与应用场景
  • javaweb基础第一天总结(HTML-CSS)
  • SpringBoot中 Gzip 压缩的两种开启方式:GeoJSON 瘦身实战
  • 基于网络原理——HTTP/HTTPS的Web服务搭建与核心技术实践
  • Ubuntu 使用 Samba 共享文件夹
  • 什么是CA根证书
  • Apache PDFBox 与 spire.pdf for java 使用记录
  • 软件架构师全方位工具图谱
  • Java全栈开发面试实战:从基础到高并发的深度解析
  • 【数学建模学习笔记】机器学习回归:决策树回归
  • 无人机信号防干扰技术难点分析
  • 企业白名单实现【使用拦截器】
  • 梯度爆炸问题:深度学习中的「链式核弹」与拆弹指南