java如何定义范性
泛型的基本定义
在Java中,泛型通过类型参数(Type Parameters)实现,允许在类、接口或方法中定义通用的类型。语法格式为在类名或接口名后添加尖括号 <T>,其中 T 是类型占位符(可自定义为其他字母或单词)。
示例:定义一个泛型类
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}
Box<T>中的T表示任意类型,使用时可以替换为具体类型(如String、Integer)。- 成员变量
content和方法参数/返回值类型均为T,实际类型由实例化时指定。
泛型方法
泛型方法在方法返回值前声明类型参数,作用范围仅限于该方法。
示例:定义一个泛型方法

public <E> void printArray(E[] array) {
for (E element : array) {
System.out.println(element);
}
}
<E>声明在方法修饰符后,仅在该方法内有效。- 调用时无需显式指定类型,编译器会根据传入参数推断
E的类型。
多类型参数
泛型支持多个类型参数,用逗号分隔。
示例:多类型参数的泛型类
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
}
K和V分别代表键和值的类型,实例化时可指定不同组合(如Pair<String, Integer>)。
泛型接口
接口同样可以使用泛型,实现类需指定具体类型或保持泛型。

示例:泛型接口与实现
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) {
// 可处理Number及其子类(如Integer、Double)的列表
}
注意事项
- 类型擦除:Java泛型在编译后会被擦除为原生类型(如
Box<T>变为Box),运行时无法获取泛型的具体类型。 - 不能实例化泛型类型:如
new T()是非法的,因为类型信息在运行时不可用。 - 基本类型不可用:泛型类型参数必须是引用类型,需使用包装类(如
Integer代替int)。
通过泛型,Java实现了类型安全的代码复用,避免了强制类型转换的繁琐和潜在错误。






