【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。-LMLPHP

JAVA泛型



泛型介绍

  • ①泛型:Java泛型是一种强大的编程概念,可用于编写可重用、类型安全和通用的代码。泛型在Java中引入了类型参数,允许开发者编写可以处理不同数据类型的通用类、接口和方法。是JDK5中引入的特性,总而言之就是:可以在编译阶段约束操作的数据结构,并进行检查
  • ②泛型格式<数据类型>
  • ③泛型只能支持: 引用数据类型

使用泛型的好处

  • ①统一数据类型。(确定泛型后,传递数据时,可传递指定类型或其子类类型数据。不能传递基本数据类型。)

  • ②泛型允许开发者在编译时捕获类型错误,而不是在运行时。把运行时期的问题提前到编译期间,避免了强制类型转换可能出现的异常,这提高了代码的质量和可维护性。

  • 注意:如果我们没有通过泛型给集合指定类型,默认所有的数据都是Object类型,此时可以往集合中添加任意的数据类型,**弊端:**此时我们在获取到集合的数据时,无法使用他的特有行为(无法访问其特有的方法函数)。


真相

  • Java中的泛型是伪泛型
  • 它只有在编译阶段生效,以检查并确定类型。
  • 当数据存入集合后,进入到运行阶段,存入的数据依旧是当作Object类型来处理。在获取时又根据泛型来进行强制转换。

泛型使用

  • 使用在类后面:

    • 泛型类

    • 适用场景:当一个类中,某个变量的数据类型不确定,可定义带泛型的类,做到约束,检查变量类型的作用。

    • 格式:修饰符 class 类名<类型>{}

    • ArrayList<String> stringList = new ArrayList<>();
      ArrayList<Integer> intList = new ArrayList<>();
      
  • 使用在方法上:

    • 泛型方法

    • 使用场景:方法中形参类型不确定时,可以使用类名后面定义的泛型,即泛型类,当然也可以也可以在方法上定义泛型(仅本方法使用)。

    • 格式:修饰符 <类型>返回值类型 方法名(类型 类型名){}

    • public <T> T getFirstElement(List<T> list) {
          return list.get(0);
      }
      
  • 用在接口后面:

    • 泛型接口
    • 格式:修饰符 interface 接口名<类型>{}
    • 如何使用一个带泛型的接口:
      • ①实现类给出具体类型。
      • ②实现类眼神泛型,创建对象时再确定。

泛型的继承和通配符

  • 泛型不具备继承性,但是数据具备继承性。
  • 通配符? —— 通配符是一种用于表示不确定类型的类型参数。? 用于表示通配符。通配符可以在方法参数中用于接受多个类型的参数
    • 上限通配符:? entends E:可以传递E或者E所有的子类类型。
    • 下限通配符:? super E:可以传递E或者E所有的父类类型。



【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。-LMLPHP

10-23 08:07