# 删除泛型类型

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

在类型擦除过程中，Java 编译器将擦除所有类型参数，并在类型参数有界时将其替换为第一个绑定，如果类型参数无限制，则替换为 `Object` 。

考虑以下表示单链表中节点的泛型类：

```
public class Node<T> {

    private T data;
    private Node<T> next;

    public Node(T data, Node<T> next) {
        this.data = data;
        this.next = next;
    }

    public T getData() { return data; }
    // ...
}

```

因为类型参数 `T` 是无界的，所以 Java 编译器用 `Object` 替换它：

```
public class Node {

    private Object data;
    private Node next;

    public Node(Object data, Node next) {
        this.data = data;
        this.next = next;
    }

    public Object getData() { return data; }
    // ...
}

```

在以下示例中，通用`节点`类使用有界类型参数：

```
public class Node<T extends Comparable<T>> {

    private T data;
    private Node<T> next;

    public Node(T data, Node<T> next) {
        this.data = data;
        this.next = next;
    }

    public T getData() { return data; }
    // ...
}

```

Java 编译器用第一个绑定类 `Comparable` 替换有界类型参数 `T` ：

```
public class Node {

    private Comparable data;
    private Node next;

    public Node(Comparable data, Node next) {
        this.data = data;
        this.next = next;
    }

    public Comparable getData() { return data; }
    // ...
}

```