Java 将compareTo()与泛型、LinkedList和sort一起使用时出现问题
我试图创建一个SortedList类来扩展LinkedList类,两者之间的唯一区别是SortedList有一个方法来按顺序插入它所持有的内容Java 将compareTo()与泛型、LinkedList和sort一起使用时出现问题,java,linked-list,nodes,Java,Linked List,Nodes,我试图创建一个SortedList类来扩展LinkedList类,两者之间的唯一区别是SortedList有一个方法来按顺序插入它所持有的内容 public class SortedList<T> extends LinkedList<T> implements Iterable<T> { // Class variables and constructor public void insert(T objectToAdd){ No
public class SortedList<T> extends LinkedList<T> implements Iterable<T> {
// Class variables and constructor
public void insert(T objectToAdd){
Node<T> newNode = new Node<>(objectToAdd);
Node<T> currentNode = head.getNext(); // Head node is a single sentinel node, so we always need to start comparing from its next.
if (objectToAdd.compareTo(currentNode.getPayload()) == -1){
// Insert and setup node links.
} else if (... rest of here){
}
}
公共类SortedList扩展LinkedList实现Iterable{
//类变量和构造函数
公共作废插入(T反对添加){
Node newNode=新节点(objectToAdd);
Node currentNode=head.getNext();//head节点是单个sentinel节点,因此我们总是需要从它的下一个开始进行比较。
if(objectToAdd.compareTo(currentNode.getPayload())=-1){
//插入和设置节点链接。
}否则如果(…这里的其余部分){
}
}
我遇到的问题是使用比较器时出现以下错误:
下面是节点类
public class Node<T>{
// Class Variables
private final T data;
public int index;
private Node<T> next;
private Node<T> prev;
public Node(T data) {
this.payload = payload;
this.next = null;
this.prev = null;
}
public void setNext(Node<T> newNode) {
this.next = newNode;
}
public void setPrev(Node<T> newNode) {
this.prev = newNode;
}
public Node<T> getNext() {
return this.next;
}
public Node<T> getPrev() {
return this.prev;
}
public T getData() {
return this.data;
}
}
公共类节点{
//类变量
私有最终T数据;
公共整数指数;
私有节点下一步;
私有节点prev;
公共节点(T数据){
这个有效载荷=有效载荷;
this.next=null;
this.prev=null;
}
public void setNext(节点newNode){
this.next=newNode;
}
公共void setPrev(节点newNode){
this.prev=newNode;
}
公共节点getNext(){
把这个还给我,下一个;
}
公共节点getPrev(){
返回此.prev;
}
公共T getData(){
返回此.data;
}
}
如果你需要我发布任何其他课程,请告诉我
有没有人能帮上忙?T不是一个具体的类型,因此编译器只知道它在对象类中定义了对象。如果有人创建了SortedList,它将没有compareTo方法,因此无法工作。您需要确保T将包含compareTo方法。最简单的方法是
public class SortedList<T extends Comparable> extends LinkedList<T> implements Iterable<T> { ... }
公共类SortedList扩展LinkedList实现了Iterable{…}
我也认为最好检查一下
if (objectToAdd.compareTo(currentNode.getPayload()) < 0) { ... }
if(objectToAdd.compareTo(currentNode.getPayload())<0){…}
因为它提供了objectToAdd提示:以字符串而不是图像的形式发布错误Yea,编辑问题以将错误包含为文本。它不应该是rocket science。您的节点类没有实现
Comparable
接口,并且(因此)没有实现compareTo()
不仅仅是节点类,而且T
对于objectToAdd.compareTo
必须具有可比性才能工作。问题是,泛型不能断言T extensed comparable
。也解决了这个问题。就是这样。谢谢您的帮助!