java - Java 中泛型类型的行为

标签 java class generics

堆栈类

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

...但是您应该知道,LinkedListStack 声明都使用名为 Item 的类型参数,这实际上是有效的巧合。它完全相当于写:

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

关于java - Java 中泛型类型的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908767/

相关文章:

java - 如何设置 JRadioButton 的位置?

java - 将其他类的图像添加到 JFrame

java - 如何在 Java 中创建一个简单的 4x3 二维数组?

ios - 具有关联类型的协议(protocol)。如何避免在协议(protocol)的所有实现上手动分配类型

java - 是否有机会在我的项目中使用 Class <?, ?> ?

java - 如何用java正则表达式解析中文元关键字?

java - 未从 JUnit 测试加载 'application.yml' 中的 Spring Boot 属性

java - 从 JRadioButton 获取值

c++ - 如何在 if/else 序列中定义未知类型的全局变量?

java - Java中有固定长度的通用数组对象吗?