List<?>和List<Object>区别

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

1. List<?>

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

特点:

`List<?>` 表示一个类型未知的 `List`,其中元素的类型可以是任意的(例如 `List<Integer>`、`List<String>` 等)。

  • 只能从 `List<?>` 中读取元素,但无法向其中添加元素(除了 `null`)。
java 复制代码
import java.util.List;
import java.util.ArrayList;

public class WildcardExample {
    public static void main(String[] args) {
        List<?> list1 = new ArrayList<String>();  // 可以是任意类型的 List
        List<?> 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` 或者不同类型的对象。

java 复制代码
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");  // 添加一个 String
        list.add(10);       // 添加一个 Integer
        list.add(3.14);     // 添加一个 Double

        // 可以从 list 中获取任何类型的元素,但需要进行类型转换
        Object obj1 = list.get(0);  // 返回 Object 类型,需要强制转换
        String str = (String) obj1; // 需要类型转换
        System.out.println(str);     // 输出 "Hello"
    }
}
相关推荐
lhxcc_fly2 分钟前
LangGraph基础知识点
python·langchain·llm·langgraph
Lvan的前端笔记3 分钟前
python:Mac 系统 uv 完整安装+入门实战
python·macos·uv
会飞锦鲤12 分钟前
基于YOLOv10的瓜果成熟度智能检测系统
人工智能·python·深度学习·yolo·flask
AOwhisky16 分钟前
Python 学习笔记(第四期)——字符串:格式化、操作与文本处理——核心知识点自测与详解
开发语言·笔记·python·学习·列表·元组·字典
一次旅行42 分钟前
【AI技术_工具】用 MCP 把本地工具接入 Claude_Cursor,让 AI 真正摸到你的数据
大数据·人工智能·python
AOwhisky1 小时前
Python 学习笔记(第六期)——函数:定义、参数传递与作用域
笔记·python·学习·云原生·运维开发·函数·参数传递
茗创科技1 小时前
CGE连接组:用基因表达解码脑疾病的异质性(附高分文献下载)
python·matlab·脑网络
汤米粥1 小时前
Python调用百度搜索触发安全验证
开发语言·python
杠杠的blog1 小时前
企业级提示词管理
python·agent·提示词·生产级实践
小小放舟、2 小时前
VS Code Code Runner 中文乱码修复与 IDEA 风格输出配置
vscode·python·code runner