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)
提前致谢
答案 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) { ... }
}
...但您应该意识到,LinkedList
和Stack
声明都使用名为Item
的类型参数这一事实实际上是巧合。它完全等同于写:
public class Stack<T>
{
public void push(LinkedList<T> ll) { ... }
}