文档

Java™ 教程
隐藏目录
泛型类型的擦除
学习路径: 学习Java语言
课程: 泛型(更新)
章节: 类型擦除

泛型类型的擦除

在类型擦除过程中,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; }
    // ...
}

在下面的示例中,泛型Node类使用了有边界的类型参数:

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编译器将有边界的类型参数T替换为第一个边界类Comparable

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; }
    // ...
}

上一页: 类型擦除
下一页: 泛型方法的擦除