我有一个家庭作业要重构一些代码来使用泛型。我觉得我为类做得很对。这是我的东西
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.csc.node(java.lang.String位于加载程序“bootstrap”的模块java.base中;edu.csc.node位于加载程序“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);
}
}
有人能指出是什么造成的吗?
在node
中,next
变量的类型错误:
public class Node<T> {
private T content;
private Node<T> next; // this is a reference to the next node
public Node(T content, Node<T> next) { // next is a Node<T>
this.content = content;
this.next = next;
}
...
public Node<T> getNext() { return next; }
public void setNext(Node<T> next) {
this.next = next;
}
您的LinkedList
还需要更经常地引用T:
public void addFirst(T content) {
Node<T> ptr = head;
head = new Node<T>(content, ptr);
}
当列表中已经有至少一个项目时,AddLast
的逻辑似乎很奇怪。您应该找到列表中的最后一个项目,然后在它后面添加一个节点。
Node<T> lastItem = head;
while(lastItem.getNext() != null) {
lastItem = lastItem.getNext();
}
lastItem.setNext(new Node(content, last););
今天早上,我试图将LibraryFolder ClasspathContainer插件安装到我的Eclipse(STS 3.6.1)中:每次尝试执行时,安装它都会导致上述错误。 更糟糕的是,我试图从Eclipse Marketplace安装插件,但Eclipse在出现大量错误时开始崩溃,包括JVM崩溃。卸载两个插件都没有修复。我尝试了一个新的工作区和一个空白的Eclipse安装,但最终不得不安装以
应用程序属性 我也试图改变mysql的版本仍然一样。我该怎么解决这个?
给出此SO线程中给出的最后一个示例。 我得到这个错误: 我应该使用jooq会满意的特殊映射器吗? 欢迎任何帮助 编辑: Jooq版本:3.14.3 Postgres:11 dto公司 我也尝试过使用SimpleFlatMapper 但是得到 我正在使用spring boot,以下是我对jackson的依赖: 堆栈跟踪:
结果: Main.java:22:错误:不兼容的类型:字符串不能转换为T返回Y;其中T是类型变量:T扩展类Vehicle 1错误中声明的字符串
MainActivity.java 对不起,我的英语很差。