Java中泛型类型的行为

时间:2015-10-02 13:53:45

标签: java class generics

Stack class

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类中有我的main方法,在其中我创建了一个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) 

提前致谢

1 个答案:

答案 0 :(得分:4)

LinkedList的声明中,Item是类型参数的名称。它只在LinkedList类本身具有直接意义。

当您宣布push方法并使用 LinkedList时,您需要指定参数类型,即链表的元素类型。例如,这没关系:

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) { ... }    
}