
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所有的父类类型。
 
- 上限通配符:











