2019.03.12 - Java泛型

文章目录

  • 泛型
    • 泛型的定义
      • 没有泛型
      • 泛型定义
        • 定义泛型与使用
          • 定义泛型的步骤
          • 创建泛型对象的步骤
          • 泛型使用的注意点
          • 代码示例
        • 泛型的好处
    • 泛型类 与 泛型方法
      • 泛型方法
        • 自定义泛型的方法
          • 示例代码:自定义泛型的普通方法与静态方法
      • 通配符
        • 泛型的上限
          • 代码示例:泛型的上限与下限
      • 泛型的擦除

泛型

泛型的定义

没有泛型

  1. 集合可以存储任何类型的元素,因为无法约束集合的元素类型
  2. 从集合中取出都是Object类型,向下转型后才能使用对应方法
    2019.03.12 - Java泛型_第1张图片
  3. 设计一个类,可以接受多种类型数据
    2019.03.12 - Java泛型_第2张图片

泛型定义

  • 泛型:广泛通用的类型
  • 常用于类型不确定的时候
  • 代码模板中的类型一开始不确定,谁调用该段代码,谁就来指明这个类型。

定义泛型与使用

定义泛型的步骤
  • 在类后面加:T代表不确定的类型,在创建对象的时候,才确定是什么类型。
  • 在变量的前面添加一个T
创建泛型对象的步骤
  • 创建对象时,需要声明泛型的类型(任意引用类型)
  • 如果没有声明,则默认是Object类型
泛型使用的注意点
  • 声明时,前后类型要一致。ArrayList list = new ArrayList();是错误的。
  • 菱形/钻石语法:从Java7开始,泛型后面的类型可以不写 ArrayList list = new ArrayList<>();
  • 泛型是没有继承的:ArrayList list = new ArrayList();是错误的。
  • 泛型其实是语法糖。其本质还是Object类型,内部还是强制类型转换。
  • 代码示例

    2019.03.12 - Java泛型_第3张图片

    泛型的好处

    • 一个类定义的泛型,如果没有传入对应的值,则默认是Object类型。
    • 不使用泛型的话,不安全,因为无法约束数据类型,在遍历时容易报错。

    2019.03.12 - Java泛型_第4张图片

    泛型类 与 泛型方法

    • 泛型类:在类上定义的泛型
    • 在创建对象时,要指明泛型的类型

    泛型方法

    • 泛型方法:就是在添加了泛型的方法
    • 泛型当中定义的泛型,只能用在 普通方法 上面,而不能使用在 ***静态方法***上。
      • 静态方法是属于类的(类名直接调用)
      • 泛型是在创建对象时,才去指定类型。

    自定义泛型的方法

    • 自定义泛型的方法:单独对一个方法上面声明泛型
    • 方法当中定义的泛型,是在使用方法时,由参数传递来确定具体的类型
    • 普通方法可以自定义泛型
    • 静态方法也可以自定义泛型
    示例代码:自定义泛型的普通方法与静态方法

    2019.03.12 - Java泛型_第5张图片

    通配符

    • 通配符:不知道使用什么类型来接收的时候,可以使用?来表示未知类型。
    • 通配符只能用来做 接收 使用

    泛型的上限

    • 泛型的上限:用来限定元素的类型必须得指定类型的子类 或 自己。
    • 泛型的下限:用来限定元素的类型必须得指定类型的父类 或 自己。
    代码示例:泛型的上限与下限

    2019.03.12 - Java泛型_第6张图片

    泛型的擦除

    2019.03.12 - Java泛型_第7张图片

    你可能感兴趣的:(Java)