2011-06-09 27 views
1

我正在爲我的編程類設置一個問題。有人可以向我解釋基本的Java泛型?

給定一個鏈表類的定義如下:設置的問題開始

1 public class Node<T> { 
2 public T data; 
3 public Node<T> next; 
4 public Node(T data, Node<T> next) { 
5  this.data = data; this.next = next; 
6  } 
7 } 
8 
9 public class LinkedList<T> { 
10 private Node<T> front; 
11 ... 
12 } 

現在,我不能完全弄清楚什麼是「節點< T>」是指(1號線)..我發現了一些關於通配符的文獻(IE列表),但這對我來說仍然沒有多大意義。我想知道是否有人可以解釋爲什麼使用通配符(特別是在這種情況下),或者,如果這不是通配符的例子,我想知道是否有人能告訴我它是什麼?我的書(「外部數據結構:Java」)沒有提到任何有用的東西,我的oracle教程網站也沒有提到(下面的鏈接,如果有人想看看甲骨文不得不說的話)

我是這個網站上:http://download.oracle.com/javase/tutorial/extra/generics/wildcards.html 但我仍然無法理解使用什麼通配符,並搞清楚,如果這是一個通配符的例子)

感謝您的幫助!

+2

您在代碼示例中根本沒有使用通配符,只有基本的泛型 – 2011-06-09 21:44:52

回答

3

首先,節點代表鏈接列表的一個節點。通過單鏈表,每個節點都保存一個值和對列表中下一個節點的引用。

然後,泛型(T是通用類型,而不是通配符)定義每個節點的值類型必須與爲List定義的類型相同。

我建議你閱讀有關java generics

1

通配符,技術上仿製藥,可以是任何對象。 T可以是String,Comparable,JList。優點是列表中的所有內容都是相同的類型,所以出來的內容都是一樣的。

例如,我可以做一個節點,當我訪問Node.data,這將是一個字符串形式,這意味着我沒有投:String data = (String)node.data;

+0

感謝大家,你們都非常有幫助! – gfppaste 2011-06-16 18:32:01

2

在Java泛型的力量 - 你現在可以以這種方式使用這個鏈表:

LinkedList<Pizza> pizzaList = new LinkedList<Pizza>(); 
// ... 

Node<Pizza> p = pizzaList.front; 
while (p != null) { 
    eat(p.data); 
    p = p.next; 
} 

基本上仿製藥採取鑄造你,你本來會在你的代碼編寫(Pizza)p.data的照顧。

1

要回答你通配符的問題...

通配符是對通用類型的約束。有三種類型的通配符:

<?> 

<? extends T> or <? extends IRunnable> 

<? super T> 

通配符限制可以進入泛型中的類或特定方法的內容。 <?>意味着任何對象都可以用在泛型類中或任何定義了這個約束的地方。 <? extends T>意味着進入泛型的類必須從T繼承或實現接口T. <? extends IRunnable>意味着進入泛型的類必須在其層次結構中的某個點實現IRunnable接口。最後,<? super T>意味着到泛型的傳入類必須是T的超類型(即T的層次結構中的父類)。

相關問題