我尝试制作一个通用链表。

使用<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
}

10-05 18:44