java泛型如何使用
泛型的基本概念
泛型(Generics)是Java 5引入的特性,允许在编译时检查类型安全,避免运行时类型转换错误。泛型可以应用于类、接口和方法,通过类型参数(如<T>)实现代码的通用性。
泛型类
泛型类在类名后添加类型参数,可以在类中作为字段、方法参数或返回值的类型。
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
使用示例:

Box<String> stringBox = new Box<>();
stringBox.setContent("Hello");
String value = stringBox.getContent(); // 无需强制类型转换
泛型接口
泛型接口与泛型类类似,接口名后添加类型参数,实现类需指定具体类型或保留泛型。
public interface Pair<K, V> {
K getKey();
V getValue();
}
// 实现类指定具体类型
public class StringIntegerPair implements Pair<String, Integer> {
@Override
public String getKey() { return "key"; }
@Override
public Integer getValue() { return 1; }
}
泛型方法
泛型方法在方法返回类型前声明类型参数,独立于类的泛型参数。

public <T> void printArray(T[] array) {
for (T item : array) {
System.out.println(item);
}
}
使用示例:
Integer[] intArray = {1, 2, 3};
printArray(intArray); // 类型推断为Integer
类型通配符
用于处理未知类型的泛型,通过?表示:
<?>:无限制通配符,接受任何类型。<? extends T>:上界通配符,接受T或其子类。<? super T>:下界通配符,接受T或其父类。
示例:
public void processList(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num);
}
}
泛型限制
- 不能实例化泛型类型:
T obj = new T(); // 编译错误 - 不能用于静态变量:静态成员属于类,无法使用实例化的类型参数。
- 类型擦除:泛型信息在编译后被擦除,运行时无法获取具体类型。
实际应用场景
- 集合框架:如
ArrayList<String>确保类型安全。 - 工具类:通用算法(如排序、比较)通过泛型实现复用。
- 回调机制:如
Comparator<T>接口支持多种类型比较。
通过泛型,Java实现了代码重用与类型安全的平衡,减少冗余代码和运行时错误。






