0

Java で一般的なリンク リストの実装を作成しています。コードは

public class LinkedList<T> {
    private Node<T> top;
    private int no_of_items;

    private class Node<T extends Comparable<? super T>> {
        T data;
        Node<T> next;
    }

    public LinkedList() {
        top = null;
    }

    public boolean isEmpty() {
        return (top == null);
    }

    public void insert(T item) {
        Node<T> node = new Node<T>();
        node.data = item;
        node.next = top;
        if(isEmpty()) {
            top = node;
        } else {
            Node<T> n = top; 
            while(n.next != null) {
                n = n.next;
            }
            n.next = node;
        }
        no_of_items++;

    }
}

私が欲しいのは、そうあるTべきですComparable。このコードのコンパイル中に、ノードを初期化する場所でエラーが発生します。

Bound Mismatch the type T is not a valid substitute for the bounded parameter <T extends Comparable<? super T>> of the type LinkedList<T>.Node<T>

ここで何が問題なのかわかりません。

4

1 に答える 1

1

私は自分でエラーを解決しました。正しいコードは

    public class LinkedList<T extends Comparable<? super T>> {
private Node top;
private int no_of_items;

private class Node {
    T data;
    Node next;
}

public LinkedList() {
    top = null;
}

public boolean isEmpty() {
    return (top == null);
}

public void insert(T item) {
    Node node = new Node();
    node.data = item;
    node.next = top;
    if(isEmpty()) {
        top = node;
    } else {
        Node n = top; 
        while(n.next != null) {
            n = n.next;
        }
        n.next = node;
    }
    no_of_items++;

}
    }

答えは、最上位クラスでジェネリック型 T を使用し、非静的内部クラスがある場合、同じ T が内部クラスにも表示されるということです。

ありがとう、

于 2013-01-28T04:41:02.797 に答える