|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Во время процесса стирания типа компилятор Java стирает все параметры типа и заменяет каждого его первым, связанным, если параметр типа ограничивается, или Object, если параметр типа неограничен.
Рассмотрите следующий универсальный class, который представляет узел в отдельно связанном списке:
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 class использует ограниченный параметр типа:
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 первым связанным class, 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; }
// ...
}