目录

泛型


泛型

1 概念

1.1 类型参数,参数化的类型

1.2 比喻:标签

2 形式

2.1 、泛型类、泛型接口

  • 语法格式

    • [修饰符] class/interface 类名/接口名<类型参数列表>{ }

      • 多个之间使用,分割

      • 类型参数习惯命名

        • 原则:尽量见名知意,尽量是1个大写字母,或大写字母加数字

        • E

          • Element
        • K

          • Key
        • V

          • Value
        • T

          • Type
        • T1,T2

        • U1,U2

        • R

          • ReturnType
  • 注意

    • (1)泛型形参由泛型实参决定

      • 在使用这个泛型类时

        • (1)创建对象

          • ArrayList list = new ArrayList();
        • (2)继承类或实现接口

          • class Student implements Comparable
    • (2)泛型实参必须指定为引用数据类型,不能是基本数据类型

    • (3)泛型形参在声明它的类或接口中,当做某种已知的类型来使用的,可以用它声明属性、方法的形参类型,方法的返回值类型,方法的局部变量类型等

    • (4)泛型形参不能用于

      • 不能作为异常的类型
      • 不能用于静态成员上面
    • (5)泛型

      • 不能用于创建数组对象

2.2 、泛型方法

  • 语法格式

    • [修饰符] <类型参数列表> 返回值类型 方法名(形参列表)
  • 泛型方法可以是静态方法,也可以是非静态方法

  • 静态方法如果要用泛型,只能使用泛型方法的形式

  • 泛型方法的类型形参只适用于当前方法,和别的方法无关

  • 泛型方法的泛型形参由调用该方法时实参的类型决定

    • 此时实参,即决定了泛型方法形参的值,又决定了泛型方法形参的类型
  • 泛型方法的泛型形参也不能是指定为基本数据类型,可以用它的包装类,也不能用于异常类型

3 泛型的通配符

3.1 、?

  • 代表任意类型

    • 如果是集合,例如ArrayList,这样的集合不能添加元素

3.2 、? extends 父类

  • 上限

    • ?代表父类本身或父类的子类类型可以
    • 如果是集合,例如ArrayList<? extends 父类>,这样的集合不可以添加

3.3 、? super 子类

  • 下限

    • ?代表子类本身或子类的父类类型可以
    • 如果是集合,例如ArrayList<? super 子类>,这样的集合,可以添加,仅限于添加子类或子类的子类对象

4 JDK1.7的简写法

4.1 ArrayList list = new ArrayList<>();