我正在编写一个遍历列表的迭代器内部类。除了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() {
}
}
}
答案 0 :(得分:2)
您应该减少泛型类型的数量。因为内部类知道其父类的泛型类型,所以应该简化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() {
}
}
}
答案 1 :(得分:1)
类型参数N
声明为
N extends Comparable<N>
即。它有界限。它必须是Comparable
。
类型参数E
声明为
E
即。它没有界限。它可以是任何类型,但不一定是Comparable
自身的类型。
因此,您无法在E
预期使用N
的情况下使用N
。考虑将E
添加到{{1}}的相同边界。