# 通用方法的擦除

> 原文： [https://docs.oracle.com/javase/tutorial/java/generics/genMethods.html](https://docs.oracle.com/javase/tutorial/java/generics/genMethods.html)

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

```
// Counts the number of occurrences of elem in anArray.
//
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 编译器用 `Shape` 替换 `T` ：

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

```