泛型的学习

泛型的概念

1.泛型提供了编译时类型的安全监测机制,该机制允许我们在编译时监测到非法的类型数据结构
2. 泛型的本质就是参数类型化,也就是所操作数的数据类型被指定为一个参数

泛型的例子

泛型的学习

泛型的好处
  1. 编译期间检查类型,提高了类型安全
  2. 减少了数据类型转化
泛型类
  1. 泛型类的定义

泛型的学习

  1. 泛型类的使用
    类名<具体的数据类型>对象名=new类名<>();

  2. 泛型的注意事项
    泛型的学习
    泛型的学习

    1. 泛型类在创建对象的时候,没有指定类型,将按照object类型来操作
    2. 泛型类,不支持基本数据类型
泛型类的使用—抽奖系统

泛型的学习
泛型的学习
泛型的学习

从泛型类派生子类

泛型的学习

  1. 子类也是泛型类,子类与父类的泛型类型要一致。
    泛型的学习

  2. 子类不是泛型类,父类要明确泛型的数据类型。

    泛型的学习

  3. 使用
    泛型的学习

泛型接口

泛型的学习

  1. 实现泛型接口的类,不是泛型类,需要明确实现泛型类接口的数据类型
    泛型的学习

  2. 泛型接口的实现类,是一个泛型类,那么要保证实现接口的泛型类泛型标识包含泛型接口的泛型标识
    泛型的学习

  3. 运行结果
    泛型的学习

泛型方法

泛型方法: 是在调用方法的时候指明泛型的具体类型

  1. 泛型方法的定义
    修饰符<T,E,.....>返回值类型 方法名(形参列表){ 方法体... }

  2. 注意事项

    • public与返回值中间非常重要,可以理解为声明此方法为泛型方法
    • 只有声明了的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
    • 声明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T
    • 与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T,E,K,V等形式的参数常用于表示泛型
  3. 实例
    泛型的学习
    泛型的学习

  4. 调用多个泛型类型静态类型方法
    泛型的学习
    泛型的学习
    泛型的学习

  5. 泛型可变参数的定义
    泛型的学习
    泛型的学习

    泛型的学习

类型通配符
  • 类型通配符一般是用"?"代替具体的类型实参
  • 所以,类型通配符是类型实参,而不是类型形参
    泛型的学习
  1. 类型通配符的上限
    类/接口<? extends 实参类型>
    要求该泛型的类型,只能是实参类型,或实参类型的子类类型
    泛型的学习
    泛型的学习
    泛型的学习

  2. 类型通配符下限
    类/接口<? super 实参类型>
    要求该泛型的类型,只能是实参类型,或实参类型的父类类型
    泛型的学习