你可以很容易地找到official docs和其他許多資源,用於Java這樣的大話題,我會試着用「重新創建泛型的過程」來解釋它。
說你要實現的問題給類Node
,它是LinkedList的一個基本組成單位,所以你將它定義爲:
class Node {
private Node next;
public Node getNext() {
return next;
}
public void setNext(Node n) {
next = n;
}
}
,但你需要一些數據存儲在每個Node
,不是嗎,否則這個班是無用的。顯然多了一個字段是必要的,要存儲類型爲MyData
,那麼它會是:你想
class Node {
private MyData element;
private Node next;
public Node getNext() {
return next;
}
public MyData getElement() {
return element;
}
public void setElement(MyData element) {
this.element = element;
}
public void setNext(Node n) {
next = n;
}
}
一天,讓您實現一個公共庫,因此它可以被任何人使用,但一嚴重的問題出現了這人不會滿意,他們可以在你的Node
MyData
型只能存儲數據,他們要存儲任何他們想要的類型,所以你做了一點改變 - 申報element
到Object
的類型,以便它可以處理任何類型:
class Node {
private Object element;
private Node next;
public Node getNext() {
return next;
}
public Object getElement() {
return element;
}
public void setElement(Object element) {
this.element = element;
}
public void setNext(Node n) {
next = n;
}
}
Everythi NG現在的好,但過一段時間後,你從一些挑剔的用戶會收到一些反饋:
- 用戶A:我到處打電話
Node.getElement()
在我的代碼,我得到一個Object
類的東西,我需要做一個類型轉換,這不方便,如果我從getElement
得到的是我想要的類型
- 用戶B:這個錯誤,直到運行時發生異常爲止,編譯器可以幫助我找到該錯誤更好:
所以你覺得如果你允許數據的type
被允許放在用戶的Node
中,而不是在實現中進行硬編碼,這意味着你將放在下劃線的位置陳述private ___ element;
是不確定的,你需要它是一個變量,並由用戶在他們使用它的時刻指定,所以變量到類,這很好,但你需要一個地方聲明變量,然後才能使用它,最後你決定在<>
(一個新的語法)裏面放上類名後面的變量聲明,那麼代碼將是:
class Node<E> {
private E element;
private Node next;
public E getElement() {
return element;
}
public void setElement(E element) {
this.element = element;
}
public Node getNext() {
return next;
}
public void setNext(Node n) {
next = n;
}
}
幾乎完成,但等待:你使用Node
自己 - 現場next
,你需要按照你剛纔的規則:元素通型信息,以Node
在當您使用它時間,所以最後你得到的代碼如下:
class Node<E> {
private E element;
private Node<E> next;
public E getElement() {
return element;
}
public void setElement(E element) {
this.element = element;
}
public Node<E> getNext() {
return next;
}
public void setNext(Node<E> n) {
next = n;
}
}
恩....對不起,我沒有想到這會這麼長......但希望它可以對你有點幫助。
https://docs.oracle.com/javase/tutorial/java/generics/ –
是的,你說得對:'E element'聲明一個名爲'element'的字段,類型'E'。 'Node next'聲明一個字段名'next',類型爲'Node '。根據定義,鏈接列表包含鏈接到下一個鏈接的節點,以形成...鏈接列表。 –
節點接下來將意味着下一個類的對象;節點''下一個意味着下一個是類節點的對象''? –
Shuvro