java如何定义泛型
定义泛型类
在类名后添加尖括号 <T>,其中 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();
定义泛型方法
在方法返回类型前声明类型参数 <T>,泛型方法可独立于类的泛型参数。
public <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
使用示例:

Integer[] intArray = {1, 2, 3};
printArray(intArray); // 自动推断类型为Integer
多类型参数
可定义多个类型参数,用逗号分隔。
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
}
使用示例:

Pair<String, Integer> pair = new Pair<>("Age", 25);
泛型接口
接口也可使用泛型,定义方式与类类似。
public interface Listener<T> {
void onEvent(T event);
}
实现示例:
public class StringListener implements Listener<String> {
@Override
public void onEvent(String event) {
System.out.println(event);
}
}
类型通配符
使用 ? 表示未知类型,常用于方法参数以增强灵活性。
<? extends T>:接受T或其子类(上界通配符)。<? super T>:接受T或其父类(下界通配符)。
public void processList(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num.doubleValue());
}
}
注意事项
- 泛型仅适用于引用类型,基本类型需使用包装类(如
Integer代替int)。 - 运行时泛型类型会被擦除(类型参数信息丢失),无法直接通过反射获取具体类型。
- 静态成员不能使用类的类型参数,但可定义独立的泛型静态方法。






