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所有的父类类型。