请解释 Java 泛型中上界限定符和下界限定符的含义及使用场景。
考察说明
考查对 Java 泛型通配符和边界限定的理解。
回答思路
- 【回答框架 1】上界限定符使用 extends 关键字,如 T extends Number,表示类型参数必须是 Number 或其子类,用于限制类型上界,常用在读取数据或实现泛型方法时。
- 【回答框架 2】下界限定符使用 super 关键字,如 T super Integer,表示类型参数必须是 Integer 或其父类,用于限制类型下界,常用于写入数据或集合的传递。
- 【回答框架 3】上界限定符适用于生产者场景,即频繁从集合中读取元素,因为可以安全地将元素视为上界类型。下界限定符适用于消费者场景,即频繁往集合中写入元素,因为可以安全地添加特定类型及其子类。
- 【回答框架 4】使用 ? extends 和 ? super 时需注意 PECS 原则:生产者使用 extends,消费者使用 super。它们在类型安全性和灵活性上各有取舍,上界限制了类型范围但无法写入,下界允许写入但读取时类型需向上转型为 Object。
- 【关键点 1】上界限定符 T extends Type,限制类型为 Type 及其子类。
- 【关键点 2】下界限定符 T super Type,限制类型为 Type 及其父类。
- 【关键点 3】PECS 原则:读取多用 extends,写入多用 super。
- 【易错点 1】使用 ? extends 时无法向集合添加元素(除 null 外),因为实际类型未知。
- 【易错点 2】使用 ? super 时读取元素只能作为 Object 处理,可能丢失具体类型信息。