36Java的泛型

为什么需要泛型?

古代类型安全

  • StringList
  • StringObjectMcp
  • StringStringListObjectMcp

泛型由来

  • 从此,我们就可以用省力的方法编写类型安全的代码
  • List
  • MapvString,Object>
  • MapvString, ListvObject>>

存在的问题

擦除带来的问题

  • Java的泛型是假泛型,是编译期的泛型
    • 泛型信息在运行期完全不保留
  • 编译器的警告
    • 使用限定符List<?>
    • 可以通过利用泛型擦除来绕过编译器检查
  • List并不是List 的子类型
    • 类比 String/Object, String[]/Object[]

    泛型的限定符

    ? extends
    ? super
    Collections.sort

    泛型的绑定

    • ? extends要求泛型是某种类型及其子类型

    • ? super要求泛型是某种类型及其父类型

    • Collections.sort

    • 泛型方法是如何工作的

    • 泛型方法的绑定

    • 按照参数绑定

    • 按照返回值自动绑定

    • 最难的绑定:

    • Collector s的一系列泛型化方法

    编写泛型代码

    • 不要一上来就写泛型方法,而是慢慢重构
    • 编写泛型方法
    • 编写泛型的类

    练习

    将方法泛型化

    泛型化的二叉树中序遍历

    点赞

    发表评论

    电子邮件地址不会被公开。必填项已用 * 标注