泛型
2025年9月25日大约 3 分钟
泛型
认识泛型
什么是泛型
- 在定义类、接口、方法时,同时声明了一个或多个类型变量(如:<E>)
称为泛型类、泛型接口、泛型方法,也统称为泛型
泛型的作用
泛型主要作用在于,能够在编译阶段约束操作的数据类型
- 类型安全:泛型保证了类型安全,避免了类型转换异常
泛型类
定义泛型类
修饰符 class 类名 <类型变量,类型变量,...>
提示
类型变量一般用单个大写字母表示,如:E、T、K、V、N 等
public class GenericsClass <E>{
}泛型接口
定义泛型接口
修饰符 interface 接口名 <类型变量,类型变量,...>
public interface GenericsInterface <T>{
}泛型方法
定义泛型方法
修饰符 <类型变量,类型变量,...> 返回值类型 方法名(参数列表)
public <T> T GenericsMethod(T t){
}类型通配符
用 ? 表示,在“使用泛型”时代表一切类型
注意
E、T、K、V、N是在定义泛型时使用
public void wildcard(List<?> list){
}泛型(通配符)的上下限
- 泛型上限:”? extends E“ ,表示 ? 必须是是 E 或 E 的子类
- 泛型下限:”? super E“ ,表示 ? 必须是是 E 或 E 的父类
泛型支持的类型
警告
泛型不支持 基本数据类型
提示
只支持 对象类型(引用数据类型)
根据上面可知,泛型不支持基本数据类型,但是项目需要基本数据类型怎么办呢?
包装类
Java 提供了包装类,将基本数据类型包装成对象类型(这个类型也叫做包装类型)
转化为包装类型后传入,这样就解决了泛型不支持基本数据类型的问题

基本数据类型➡️包装类型
手动装箱(了解即可)
不推荐
public Integer(int value);
推荐
public static Integer valueOf(int i);
包装类型 变量名 = 包装类型.value(基本数据的变量)
int i = 10;
Integer integer = new Integer(i); //过时的方法
Integer integer1 = Integer.valueOf(i); //推荐的方法自动装箱(重点)
包装类型 变量名 = 基本数据的变量
提示
自动装箱实际就是省略了手动调用方法的过程,下面是区别
int i = 10;
Integer integer = Interger.valueOf(i); //手动装箱
Integer integer = i; //自动装箱包装类型➡️基本数据类型
自动拆箱
基本数据类型 变量名 = 包装类型变量
Integer integer = 10;
int i = integer; //自动拆箱包装类的其他功能
基本类型转字符串
- 包装类型.toString()
int i = 10;
String str = Integer.toString(i); // 完整写法
String str = i.toString(); // 简写字符串转基本类型
- 包装类型.parseXXX(String str)
String str = "10";
int i = Integer.parseInt(str);- 包装类型.valueOf(String str)
String str = "10";
int i = Integer.valueOf(str);