java如何定义
Java中定义泛型的方法
在Java中,泛型(Generics)允许在定义类、接口或方法时使用类型参数,从而增强代码的类型安全性和重用性。以下是定义泛型的常见方式:
定义泛型类
泛型类在类名后使用尖括号声明类型参数,类型参数可以是任意标识符(通常使用单个大写字母,如T、E、K、V等)。
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
T是类型参数,使用时可以替换为具体类型(如Box<String>)。
定义泛型接口
泛型接口的定义方式与泛型类类似:
public interface List<T> {
void add(T item);
T get(int index);
}
- 实现接口时需指定具体类型或保留泛型参数。
定义泛型方法
泛型方法在方法返回类型前声明类型参数,作用域仅限于该方法:
public <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
- 调用时无需显式指定类型,编译器会推断类型(如
printArray(new String[]{"a", "b"}))。
多类型参数
泛型支持多个类型参数,用逗号分隔:
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
}
泛型约束(边界)
通过extends关键字限制类型参数的范围:
public <T extends Number> double sum(T a, T b) {
return a.doubleValue() + b.doubleValue();
}
T必须是Number或其子类(如Integer、Double)。
通配符
使用?表示未知类型,常用于泛型类或方法的参数:

public void processList(List<? extends Number> list) {
// 允许传入List<Integer>、List<Double>等
}
注意事项
- 类型擦除:Java泛型在编译后会擦除类型信息,运行时无法获取泛型的具体类型。
- 不能实例化泛型类型:例如
new T()是非法的。 - 基本类型不可用:泛型类型参数必须是引用类型,需使用包装类(如
Integer代替int)。






