如何实现扩展Comparable的列表列表?

时间:2014-04-06 23:39:00

标签: java generics linked-list generic-list comparable

我尝试制作通用链表。

使用<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();
}
}

2 个答案:

答案 0 :(得分:1)

  1. 为什么要求T extends Comparable<T>?你似乎没有在任何地方使用它。

  2. 由于您需要T extends Comparable<T>,这意味着列表的参数必须与自身相当。 LList<LList<Integer>>不起作用,因为LList<Integer>与自身无法比较(它不会扩展Comparable<LList<Integer>>)。您确定不只是想要LList<Integer>吗?

答案 1 :(得分:0)

LList<T extends Comparable>

所以LList只接受将Comparable扩展为类型参数的类。

LList <LList<Integer>> subArrsList = new LList <LList<Integer>>();

在此语句中,您将LList<Integer>类作为类型参数。 LList<Integer>未延伸Comparable。 整数扩展可比,但您没有使用Integer类作为类型参数,您使用的LList不会扩展Comparable。

所以你得到一个错误。

按如下方式更改LList课程:

public class LList <T extends Comparable <T>> implements Comparable<LList<T>>{
    @Override public int compareTo(LList<T> list) {
        //to do
    }
...// your code
}