Java集合体系详解:Java中的泛型(Generics)

68 阅读1分钟

泛型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