什么是泛型?
泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,而这种参数类型可以用在类、方法和接口中,分别被称为
泛型类
、泛型方法
、泛型接口
。
注意:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。
为什么使用泛型
早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。
定义泛型方法的规则:
- 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的 <E>)。
- 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
- 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
- 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)。
java 中泛型标记符:
标记符是自己定义的,没有规定一定要用以下几种,但常用的就是以下几种标记符
- E - Element (在集合中使用,因为集合中存放的是元素)
- T - Type(Java 类)
- K - Key(键)
- V - Value(值)
- N - Number(数值类型)
- ? - 表示不确定的 java 类型
泛型的值只能是包装类不能是基本类型
泛型类
引用传递
只能传入fun内指定的类型
泛型通配符<?>
受限泛型(泛型上下限)
给泛型的类型指定明确的范围,可以指定一个泛型的上限和下限。
下限不能定义在类上,上限可以
泛型的上限:
- 格式:类型名称 <? extends E> 对象名称
- 意义:只能接收E类本身及其子类
泛型的下限:
- 格式:类型名称 <? super E> 对象名称
- 意义:只能接收E类型本身及其父类型