gpt4 book ai didi

java - Java 链表结构(泛型)

转载 作者:行者123 更新时间:2023-12-01 18:09:44 25 4
gpt4 key购买 nike

我正在尝试用java实现LinkedList。结构很简单: Controller (BList类)、节点、节点的信息组件。现在我想集成泛型的使用:节点的信息组件应该是泛型的。我无法理解以下错误。如果我指定了泛型类型,为什么编译器需要对象类型 <E>

Test.java:7: error: cannot find symbol
System.out.println(newNode.getElement().getUserId());
^
symbol: method getUserId()
location: class Object
1 error

这是我的代码。预先感谢您的帮助。

public class BList<E> {
private Node head;

public BList() {
this.head = null;
}

public Node insert(E element) {
Node<E> newNode = new Node<E>(element);

newNode.setSucc(this.head);
this.head = newNode;

return newNode;
}
}

class Node<E> {
private Node succ;

private E element;

public Node(E element) {
this.succ = null;
this.element = element;
}

public void setSucc(Node node) {
this.succ = node;
}

public void setElement(E element) {
this.element = element;
}

public E getElement() {
// return this.element; // ?
return (E) this.element;
}
}

class Element {
private int userId;

public Element(int userId) {
this.userId = userId;
}

public int getUserId() {
return this.userId;
}
}

public class Test {
public static void main(String[] args) {

BList<Element> bList = new BList<Element>();

Node newNode = bList.insert(new Element(1));
// error happens here!
System.out.println(newNode.getElement().getUserId());

}
}

最佳答案

您正在使用 Node 的原始形式在 2 个地方:

  1. BList的返回类型的insert方法。返回Node<E>而不是Node .
  2. newNode的声明在main 。将其声明为Node<Element>而不是Node .

因为 Node 的原始形式已使用,Object现在是返回类型,它没有 getUserId方法。预泛型代码(Java 1.5 之前)将转换 getElement 的结果到Element在调用getUserId之前,但是进行上述修改就是用泛型解决这个问题的方法。

关于java - Java 链表结构(泛型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33926992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com