如何定义泛型java
定义泛型类
在Java中,泛型类通过类型参数(通常用大写字母如T、E等表示)定义。类名后使用尖括号声明类型参数,类内部可将其用作字段、方法参数或返回类型。
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
定义泛型方法
泛型方法在方法返回类型前声明类型参数,即使所在类不是泛型类也可使用。

public class Util {
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
}
多类型参数
泛型支持多个类型参数,用逗号分隔。

public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
}
泛型接口
接口同样可以定义为泛型,实现类需指定具体类型或保持泛型。
public interface List<T> {
void add(T item);
T get(int index);
}
// 实现示例
public class StringList implements List<String> {
private ArrayList<String> items = new ArrayList<>();
@Override
public void add(String item) {
items.add(item);
}
@Override
public String get(int index) {
return items.get(index);
}
}
类型通配符
使用?表示未知类型,通常用于方法参数以增强灵活性。? extends T表示上界通配符,? super T表示下界通配符。
public void printList(List<?> list) {
for (Object item : list) {
System.out.println(item);
}
}
// 上界通配符示例
public double sum(List<? extends Number> numbers) {
double total = 0;
for (Number num : numbers) {
total += num.doubleValue();
}
return total;
}
泛型限制
- 不能使用基本类型(如
int),需用包装类(如Integer)。 - 不能直接实例化类型参数(如
new T()),需通过反射或工厂模式实现。 - 静态成员不能使用类的类型参数。
通过以上方式,可以灵活定义和使用泛型,提升代码的类型安全性和复用性。






