# 擦除泛型方法
Java 编译器也会擦除泛型方法参数中的类型参数。考虑下面的一般方法:
// 计算数组中元素出现的次数
public static <T> int count(T[] anArray, T elem) {
int cnt = 0;
for (T e : anArray)
if (e.equals(elem))
++cnt;
return cnt;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
由于 T 是无界的,因此 Java 编译器将其替换为 Object:
public static int count(Object[] anArray, Object elem) {
int cnt = 0;
for (Object e : anArray)
if (e.equals(elem))
++cnt;
return cnt;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
假设定义了以下类:
class Shape { /* ... */ }
class Circle extends Shape { /* ... */ }
class Rectangle extends Shape { /* ... */ }
1
2
3
2
3
你可以写一个通用的方法来绘制不同的形状:
public static <T extends Shape> void draw(T shape) { /* ... */ }
1
Java 编译器替换 T
public static void draw(Shape shape) { /* ... */ }
1
← 删除泛型类型 类型擦除和桥接方法的影响 →