文档

Java™教程
隐藏目录
泛型方法的擦除
导航: 学习Java语言
课程: 泛型(已更新)
章节: 类型擦除

泛型方法的类型擦除

Java编译器还会擦除泛型方法参数中的类型参数。考虑以下泛型方法:

// 计算anArray中elem的出现次数。
//
public static <T> int count(T[] anArray, T elem) {
    int cnt = 0;
    for (T e : anArray)
        if (e.equals(elem))
            ++cnt;
        return cnt;
}

因为 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;
}

假设定义了以下类:

class Shape { /* ... */ }
class Circle extends Shape { /* ... */ }
class Rectangle extends Shape { /* ... */ }

您可以编写一个通用方法来绘制不同的形状:

public static <T extends Shape> void draw(T shape) { /* ... */ }

Java编译器将 T 替换为 Shape

public static void draw(Shape shape) { /* ... */ }

上一页: 泛型类型的擦除
下一页: 类型擦除和桥方法的影响