【发布时间】:2020-03-11 04:45:23
【问题描述】:
我有一个家庭作业要重构一些代码以使用泛型。我觉得我在课堂上做得很正确。这是我所拥有的
public class Node<T> {
private T content;
private T next;
public Node(T content, T next) {
this.content = content;
this.next = next;
}
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
public T getNext() { return next; }
public void setNext(T next) {
this.next = next;
}
}
public class LinkedList<T> {
private Node head;
public LinkedList() {
head = null;
}
public void addFirst(T content) {
Node<Object> ptr = head;
head = new Node<>(content,ptr);
}
public void addLast(T content) {
Node<Object> last = new Node<>(content,null);
if (head == null) {
head = last;
} else {
Node<Node> ptr = new Node(content, head);
while(ptr.getNext() != null) {
ptr = ptr.getNext();
}
ptr.setNext(last);
}
}
当涉及到实例化时,我得到一个 ClassCastException 错误:
“线程“main”中的异常 java.lang.ClassCastException:类 java.lang.String 无法转换为类 edu.cscc.Node(java.lang.String 在加载器“bootstrap”的模块 java.base 中; edu.cscc.Node 在 loader 'app' 的未命名模块中)"
这是导致错误的主类中的内容。
public class Main {
public static void main(String[] args) {
list1();
list2();
}
// Use linked list with Strings
public static void list1() {
LinkedList<String> llist = new LinkedList<String>();
llist.addFirst("one");
llist.addLast("two");
llist.addLast("three");
llist.addFirst("zero");
llist.addLast("xxxx");
llist.addFirst("yyyyy");
llist.deleteLast();
llist.deleteFirst();
System.out.println(llist);
llist.deleteFirst();
llist.deleteLast();
llist.deleteFirst();
llist.deleteLast();
System.out.println(llist);
}
// Use linked list with Integers
public static void list2() {
LinkedList<Integer> llist = new LinkedList<Integer>();
llist.addFirst(1);
llist.addLast(2);
llist.addLast(3);
llist.addFirst(0);
llist.addLast(142);
llist.addFirst(-97);
llist.deleteLast();
llist.deleteFirst();
System.out.println(llist);
llist.deleteFirst();
llist.deleteLast();
llist.deleteFirst();
llist.deleteLast();
System.out.println(llist);
}
}
谁能指出这是什么原因造成的?
【问题讨论】:
-
我们能看到完整的 LinkedList 类吗?但即使我注释掉你省略的函数,我也不会收到任何错误。