Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将compareTo()与泛型、LinkedList和sort一起使用时出现问题_Java_Linked List_Nodes - Fatal编程技术网

Java 将compareTo()与泛型、LinkedList和sort一起使用时出现问题

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

我试图创建一个SortedList类来扩展LinkedList类,两者之间的唯一区别是SortedList有一个方法来按顺序插入它所持有的内容

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
。也解决了这个问题。就是这样。谢谢您的帮助!