java泛型详解

泛型就是类型参数化,让类、接口、方法能够处理多种数据类型,而不需要为每种类型都写一份代码。

当你发现要为一个新类型复制粘贴代码时,就该考虑用泛型了!

泛型就像是Java的"万能模板",一份代码,多种用途,既安全又高效。

泛型类、接口、方法

// 语法:class 类名<类型参数>

使用场景

总结:什么时候用泛型?

强烈建议使用泛型的场景:

  1. 集合操作:List、Set、Map必须用,保证类型安全
  2. 工具类:处理多种类型数据的工具
  3. API响应:统一格式的接口返回
  4. 通用组件:会被多处复用的代码
  5. 数据转换:不同类型间的转换

List<T>- 列表

Map<K, V>- 键值对

响应结果<T>- 返回数据

基本语法格式

  1. 泛型类的写法
java 复制代码
// 语法:class 类名<类型参数> { ... }
// 这里的T就像"占位符",用的时候再确定具体类型

class 盒子<T> {  // 1. 在类名后面加<T>
    // 2. 在类里面,T可以当作一种类型来用
    private T 里面的东西;  // 这里T是"某种东西的类型"
    
    public 盒子(T 东西) {  // 构造方法参数也是T
        this.里面的东西 = 东西;
    }
    
    public T 拿出来() {  // 返回类型也是T
        return 里面的东西;
    }
}
  1. 多个类型参数
java 复制代码
// 语法:class 类名<T, U, V> { ... }
// 可以定义多个类型参数,用逗号隔开

class 双人座<T, U> {  // T和U是两个不同的类型
    private T 左边的人;
    private U 右边的人;
    
    public 双人座(T 左, U 右) {
        this.左边的人 = 左;
        this.右边的人 = 右;
    }
    
    public T 左边是谁() {
        return 左边的人;
    }
    
    public U 右边是谁() {
        return 右边的人;
    }
}

创建对象的写法

  1. 完整的写法
java 复制代码
// 完整的写法:类名<具体类型> 变量名 = new 类名<具体类型>();

盒子<String> 苹果盒子 = new 盒子<String>("苹果");
// 前面的<String>告诉编译器:这是一个装String的盒子
// 后面的<String>重复了,有点啰嗦
  1. 简化的写法(推荐)
java 复制代码
// Java 7+ 可以这样写:类名<具体类型> 变量名 = new 类名<>();

盒子<String> 苹果盒子 = new 盒子<>("苹果");
// 后面用空的<>,编译器会自动推断是String
// 这叫"钻石语法",像钻石<>的形状
  1. 空的<>是什么意思?
java 复制代码
// 1. 创建对象时的空<>
盒子<String> 盒子1 = new 盒子<>("苹果");
// 这个<>表示"和前面一样的类型"
// 编译器看到前面是<String>,就知道后面也是String

// 2. 如果不写<>会怎样?
盒子<String> 盒子2 = new 盒子("苹果");  // 有警告,不推荐
// 这叫"原始类型",相当于没有泛型检查

规则

规则1:声明时用<T>

规则2:使用时指定具体类型

规则3:空的<>表示"和前面一样"

规则4:类型安全检查

统一返回结果的用例

java 复制代码
public class Result<T> {
    private Integer code;//业务状态码  0-成功  1-失败
    private String message;//提示信息
    private T data;//响应数据

    //快速返回操作成功响应结果(带响应数据)
    public static <T> Result<T> success(T data) {
        //这里的T省略了,因为可以根据上下文推断出这里应该是什么类型。如果不能推断出,这里就要写上
        return new Result<>(0, "操作成功", data);
    }

    //快速返回操作成功响应结果
    public static <T> Result<T> success() {
        return new Result<>(0, "操作成功", null);
    }

    public static <T> Result<T> error(String message) {
        return new Result<>(1, message, null);
    }

}
相关推荐
hello 早上好6 小时前
05_Java 类加载过程
java·开发语言
PPPPPaPeR.6 小时前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
echoVic6 小时前
多模型支持的架构设计:如何集成 10+ AI 模型
java·javascript
橙露6 小时前
Java并发编程进阶:线程池原理、参数配置与死锁避免实战
java·开发语言
froginwe116 小时前
C 标准库 - `<float.h>`
开发语言
echoVic6 小时前
AI Agent 安全权限设计:blade-code 的 5 种权限模式与三级控制
java·javascript
PPPPickup6 小时前
easymall---图片上传以及图片展示
java
历程里程碑6 小时前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Wpa.wk6 小时前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化
Pluchon6 小时前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法