Java集合体系详解:Java中的泛型(Generics)
泛型Generics
- JDK1.5 引入的新特性
- 语法:<数据类型> ,其中数据类型必须是引用类型
- 本质:参数化类型(数据类型被指定成为一个参数)
- 好处
- 提供了编译时类型安全检测机制
- 极大增强Java语言的类型系统和抽象能力
Java泛型实现时面临的问题
- 后向兼容:还需要支持原来无泛型的容器吗?
- 不得不这样做:二进制后向兼容性是明确写入Java语言规范的严肃承诺JDK1.0编译出来的class文件,JDK19也要支持
- 面临的选择:
- 需要泛型化的容器类型,以前的保持不变,新写一套支持泛型化的代码 —— C#的选择
- 直接把已有的类型泛型化(类型擦除) —— Java的选择
泛型中的通配符
- 无限定通配符 - ?
- 上界通配符 - ? extends T
- 下界通配符 - ? super T
PECS原则 - Producer Extends Consumer Super
- Producer Extends
- 从集合中读取类型T的数据(集合是生产者),使用通配符 ? extends T
- Consumer Super
- 往集合中添加类型T的数据(集合是消费者),使用通配符 ? super T