簡體   English   中英

鏈表迭代器內部類-java

[英]linked list iterator inner class-java

我正在編寫一個迭代列表的迭代器內部類。 除了remove方法,我相信我已經正確實現了迭代器的所有方法,但是我收到一條錯誤消息:“綁定不匹配:類型E不是類型List.Node的有界參數>的有效替代品”。 我相信必須在我的代碼頂部使用Node>實現Iterable,但是如果不需要的話,我不想更改它。 關於應該怎么做的任何建議?

public class List<T extends Comparable<L>> implements Iterable<L> {

    private class Node<N extends Comparable<N>> {
        private N data;
        private Node<N> next;
    }
    protected Node<L> head;


    public Iterator<L> iterator() {

        return new ListIterator<L>();

    }

    public class ListIterator<E extends Comparable<E>> implements Iterator<E> {

        private Node<E> N = (Node<E>) head; //"Bound mismatch: The type E is not a valid substitute for the bounded parameter <D extends Comparable<D>> of the type List<T>.Node<D>"

        public boolean hasNext() {
            return (N.next != null);
        }

        public E next() {
            if (!hasNext())
                throw new NoSuchElementException();
            else {
                N = N.next;
                return N.data;
            }
        }

        public void remove() {

        }

    }
}

您應該減少泛型類型的數量。 因為內部類知道其父類的通用類型,所以應簡化Node和ListIterator類:

public class List<L extends Comparable<L>> implements Iterable<L> {
    private class Node {
        private L data;
        private Node next;
    }
    protected Node head;

    public Iterator<L> iterator() {

        return new ListIterator();

    }

    public class ListIterator implements Iterator<L> {

        private Node N = head;

        public boolean hasNext() {
            return (N.next != null);
        }

        public L next() {
            if (!hasNext())
                throw new NoSuchElementException();
            else {
                N = N.next;
                return N.data;
            }
        }

        public void remove() {

        }

    }
}

類型參數N聲明為

N extends Comparable<N>

即。 它有界限。 它必須與其自身Comparable

類型參數E聲明為

E

即。 它沒有界限。 它可以是任何類型,但不一定是Comparable自身Comparable的類型。

因此,不能在期望N地方使用E 考慮將與N相同的范圍添加到E

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM