全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-10 6 分钟 ✍️ juanwangdev

泛型类

泛型类在类名后声明类型参数,创建实例时指定具体类型。

泛型类定义

Java
// 泛型类定义
public class Box<T> {
    private T value;

    public void set(T value) {
        this.value = value;
    }

    public T get() {
        return value;
    }
}

泛型类使用

Java
// 创建实例时指定类型
Box<String> stringBox = new Box<>();
stringBox.set("Hello");
String s = stringBox.get();  // 无需转型

Box<Integer> intBox = new Box<>();
intBox.set(100);
Integer i = intBox.get();    // 无需转型

类型推断:Java 7+ 可省略右侧类型参数:new Box<>()

多类型参数

Java
// 多个类型参数
public class Pair<K, V> {
    private K key;
    private V value;

    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public K getKey() { return key; }
    public V getValue() { return value; }
}

// 使用
Pair<String, Integer> pair = new Pair<>("age", 25);
String key = pair.getKey();    // "age"
Integer value = pair.getValue();  // 25

常见命名约定

类型参数常见用途
TType,任意类型
EElement,集合元素
KKey,键
VValue,值
NNumber,数值
RResult,返回类型

泛型类应用示例

泛型容器

Java
public class Container<T> {
    private List<T> items = new ArrayList<>();

    public void add(T item) {
        items.add(item);
    }

    public T get(int index) {
        return items.get(index);
    }

    public int size() {
        return items.size();
    }
}

泛型结果包装

Java
public class Result<T> {
    private boolean success;
    private T data;
    private String message;

    public Result(boolean success, T data, String message) {
        this.success = success;
        this.data = data;
        this.message = message;
    }

    public boolean isSuccess() { return success; }
    public T getData() { return data; }
    public String getMessage() { return message; }
}

// 使用
Result<User> result = new Result<>(true, user, "查询成功");
User user = result.getData();

泛型类 vs 普通类

特性泛型类普通类
类型安全编译期检查运行时可能出错
转型无需手动转型需手动转型
代码复用一套代码多类型需为每种类型写代码

要点总结

  • 泛型类在类名后声明类型参数 <T>
  • 创建实例时指定具体类型
  • 多类型参数用 <K, V> 等命名
  • 类型推断:Java 7+ 可用 new Box<>()
  • 泛型类保证类型安全,避免手动转型
  • 常见命名:T(类型)、E(元素)、K(键)、V(值)
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 集合性能分析
下一篇 → 泛型接口
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码