堆栈类
public class Stack
{
public void push(LinkedList ll) {
}
链表类
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)
提前致谢
最佳答案
在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) { ... }
}
关于java - Java 中泛型类型的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908767/