我正在尝试创建一个扩展LinkedList类的SortedList类,只有两者之间的区别在于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){
}
}
我遇到的问题是使用compareTo会出现此错误:
http://puu.sh/vxKxv/c9ee91d54c.png
这是Node类。
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;
}
}
如果您需要我发布任何其他课程,请告诉我。
现在已经坚持了一段时间,有人能帮忙吗?
答案 0 :(得分:2)
T不是具体类型,因此编译器只知道它具有在Object类中定义的对象。如果有人制作SortedList,它将没有compareTo方法,因此它无法工作。您需要确保T将包含compareTo方法。最简单的方法是
public class SortedList<T extends Comparable> extends LinkedList<T> implements Iterable<T> { ... }
另外在我看来,最好检查一下
if (objectToAdd.compareTo(currentNode.getPayload()) < 0) { ... }
因为它为您提供了objectToAdd&lt;的关系。 currentNode.getPayload()可视化。此外,Comparable接口不保证它将为-1。它说:
@return一个负整数,零或一个正整数作为此对象 小于,等于或大于指定的对象。