2015-10-02 70 views
2

Stack類行爲泛型類型的Java中

public class Stack 
{ 
public void push(LinkedList ll) { 

} 

LinkedList類

class LinkedList<Item> 
{ 
private class Node<Element> 
{ 
    private Element value ; 
    private Node<Element> next; 
} 
Node(Element value, Node<Element> ref) { 
     this.value = value; 
     this.next = ref; 
    } 
} 

我有我的Stack類主要方法,在這我已經Stack類的一個對象,並與對象的類LinkedList,我正在調用push方法。 我不明白的是,如果我使用(LinkedList<Type> ll)作爲參數,編譯器顯示錯誤:

cannot find symbol 
    public void push(LinkedList<Item> ll) { 
           ^
    symbol: class Item 
    location: class Stack 

爲什麼這個錯誤發生的歷史昂爲什麼,如果我提前

使用

public void push(LinkedList ll) 

感謝工作正常

回答

4

在聲明LinkedList時,Item是類型參數的名稱。它僅在LinkedList課程本身中具有直接含義。

當你使用LinkedList聲明你push方法和,你會指定類型參數,即鏈表的元素類型。例如,這將是罰款:

public void push(LinkedList<String> ll) 

...但Item是沒有意義的標識符。

現在,作爲替代方案,你可以讓你的Stack類通用太:

public class Stack<Item> 
{ 
    public void push(LinkedList<Item> ll) { ... }  
} 

...但你應該知道的事實,無論是LinkedListStack聲明使用名爲Item一個類型參數實際上是巧合。這完全等於寫:

public class Stack<T> 
{ 
    public void push(LinkedList<T> ll) { ... }  
}