The Java Tutorials have been written for JDK 8.Java教程是为JDK 8编写的。Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available.本页中描述的示例和实践没有利用后续版本中引入的改进,并且可能使用不再可用的技术。See Java Language Changes for a summary of updated language features in Java SE 9 and subsequent releases.有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言更改。
See JDK Release Notes for information about new features, enhancements, and removed or deprecated options for all JDK releases.有关所有JDK版本的新功能、增强功能以及已删除或不推荐的选项的信息,请参阅JDK发行说明。
During the type erasure process, the Java compiler erases all type parameters and replaces each with its first bound if the type parameter is bounded, or Object if the type parameter is unbounded.在类型擦除过程中,如果类型参数有界,Java编译器将擦除所有类型参数,并用其第一个界替换每个类型参数;如果类型参数无界,则用Object替换每个类型参数。
Consider the following generic class that represents a node in a singly linked list:考虑下面的泛型类,该类表示单个链接列表中的节点:
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; } // ... }
Because the type parameter T is unbounded, the Java compiler replaces it with Object:因为类型参数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; } // ... }
In the following example, the generic Node class uses a bounded type parameter:在以下示例中,泛型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; } // ... }
The Java compiler replaces the bounded type parameter T with the first bound class, Comparable: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; } // ... }