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");
Box<Integer> intBox = new Box<>();
intBox.setContent(123);
泛型方法定义
在方法返回类型前声明类型参数 <T>,方法内可使用泛型类型:
public <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
调用时自动推断类型或显式指定:
String[] strArr = {"A", "B"};
printArray(strArr); // 自动推断为String
printArray(new Integer[]{1, 2}); // 自动推断为Integer
多类型参数
泛型支持多个类型参数,用逗号分隔:
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
// getter/setter省略
}
使用示例:
Pair<String, Integer> pair = new Pair<>("Age", 25);
泛型接口定义
接口中定义泛型方式与类类似:
public interface List<T> {
void add(T item);
T get(int index);
}
实现时需指定具体类型或保留泛型:
public class StringList implements List<String> {
@Override
public void add(String item) { /*...*/ }
@Override
public String get(int index) { /*...*/ }
}
类型通配符
使用 ? 表示未知类型,常用于方法参数:
<?>无限制通配符<? extends T>上界通配符(接受T及其子类)<? super T>下界通配符(接受T及其父类)
示例:
public void processList(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num.doubleValue());
}
}
可传入 List<Integer> 或 List<Double>。
泛型限制
- 不能使用基本类型(如
int,需用包装类Integer) - 不能直接实例化泛型:
T obj = new T();非法 - 静态上下文中不能使用类的类型参数







