无限定通配符用表示,代表任意具体但未知的类型,仅支持读取(元素视为object)和写入null,用于解决泛型非协变导致的参数传递限制,适用于类型无关的只读操作。

Java 中的无限定通配符用 > 表示,它代表“任意具体类型”,但不提供任何类型信息。它不是 Object 的简写,也不是万能类型,而是一种类型安全的占位机制,主要用于解决泛型参数无法协变带来的传参限制。
什么时候必须用 >
当方法需要接收多种不同泛型类型的集合(比如 List
- 例如:一个打印列表内容的工具方法,只读不改,类型无关
- 错误写法:
List<object></object>不能接收List<string></string>(泛型无父子关系) - 正确写法:
List>可以接收所有List<x></x>,编译通过
能做什么:只读,且读出来是 Object
使用 List> 时,你可以安全地遍历、获取元素,但每个元素只能当作 Object 处理:
-
for (Object o : list)✅ 合法 -
String s = list.get(0);❌ 编译报错(类型不明确) -
list.get(0).toString()✅ 因为 Object 有 toString()
不能做什么:几乎不能写入
除了 null,你不能向 List> 添加任何具体对象:
-
list.add("abc");❌ 报错:无法确认 "abc" 是否符合未知类型 -
list.add(null);✅ 唯一允许的写入操作(null 可赋给任意引用类型) - 想写入?说明你其实需要更精确的边界——考虑
? extends T或? super T
和泛型方法的区别
List> 是**调用端语法**,用于放宽参数类型;而泛型方法(如 <t> void foo(List<t>)</t></t>)是**定义端语法**,强调类型一致性。两者目的相似,但适用场景不同:
- 工具类静态方法(如 Collections.copy、Collections.fill)多用通配符
- 需在方法体内复用类型变量做转换或返回时,优先选泛型方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











