Java通配符?用于泛型中处理未知类型,分无界(List)、上限(List

Java通配符主要用于泛型中,用来处理未知类型,增强代码的灵活性和安全性。通配符用 ? 表示,根据使用场景可分为三种形式:无界通配符、上限通配符和下限通配符。
无界通配符(Unbounded Wildcards)
形式为 List>,表示可以接受任何类型的泛型集合。
适用于你只调用不依赖具体类型的方法,比如 size() 或 clear(),而不涉及添加元素(除了 null)的情况。
说明:- 只能读取数据,不能向集合中写入除 null 外的任何值。
- 适合用于“只读”操作的参数传递。
上限通配符(Upper Bounded Wildcards)
形式为 List extends Number>,表示接受 Number 或其子类(如 Integer、Double)的泛型集合。
立即学习“Java免费学习笔记(深入)”;
当你需要读取数据,并希望对元素进行与上界类型相关的操作时使用。
- 可以从集合中读取对象,并将其视为上界类型(如 Number)。
- 不能向集合中添加除 null 以外的任何值,因为编译器无法确定实际类型是哪一个子类。
下限通配符(Lower Bounded Wildcards)
形式为 List super Integer>,表示接受 Integer 或其父类(如 Number、Object)的泛型集合。
当你需要向集合中写入数据,且后续由其他部分读取时使用。
说明:- 可以安全地向集合中添加 Integer 及其子类对象。
- 从集合读取时,只能当作 Object 类型使用,失去具体类型信息。
PECS 原则(Producer-Extends, Consumer-Super)
这是使用通配符的重要指导原则:
- 如果一个集合主要用于生产(读取)数据,使用 ? extends T。
- 如果一个集合主要用于消费(写入)数据,使用 ? super T。
- 这个原则来自《Effective Java》,能帮助正确选择通配符类型。
基本上就这些。合理使用通配符能让泛型代码更灵活,同时保持类型安全。关键是理解读写限制和应用场景。不复杂但容易忽略细节。











