我尝试制作一个通用链表。
使用<T extends Comparable <T>>
的此链接列表的节点。但是当我使用
LList<LList<Integer>> linkedlist = new LList<LList<Integer>>();
创建一个新实例,有一个错误:
Multiple markers at this line
- Bound mismatch: The type LList<Integer> is not a valid substitute
for the bounded parameter <T extends Comparable<T>> of the type LList<T>
- Bound mismatch: The type LList<Integer> is not a valid substitute
for the bounded parameter <T extends Comparable<T>> of the type
我该如何解决?
节点类:
public class Node <T extends Comparable <T>> {
// Members:
public T data;
public Node <T> next;
// Methods:
public Node () {
data =null;
next = null;
}
public Node (T data) {
this.data = data;
next = null;
}
}
LList类:
public class LList <T extends Comparable <T>> {
// Members:
public Node <T> head;
// Methods:
public LList () {
head = null;
}
// Add node.
public void addNode (T data) {
if (head == null) {
head = new Node <T> (data);
return;
}
Node <T> newNode = new Node <T> (data);
Node <T> tempNode = head;
while (tempNode.next != null) tempNode = tempNode.next;
tempNode.next = newNode;
}
// Show linked list.
public void showLLForInteger () {
if (head == null) return;
Node <T> tempNode = head;
while (tempNode != null) {
System.out.print(String.format("%-6d", tempNode.data));
tempNode = tempNode.next;
}
System.out.println();
}
}
最佳答案
LList<T extends Comparable>
因此
LList
仅接受将Comparable扩展为类型参数的类。LList <LList<Integer>> subArrsList = new LList <LList<Integer>>();
在此语句中,您将
LList<Integer>
类作为类型参数。 LList<Integer>
不扩展Comparable
。Integer扩展了可比较的范围,但是您没有使用Integer类作为类型参数,而是使用了不会扩展Comparable的LList。
因此,您遇到了错误。
更改您的
LList
类,如下所示:public class LList <T extends Comparable <T>> implements Comparable<LList<T>>{
@Override public int compareTo(LList<T> list) {
//to do
}
...// your code
}