为什么会出现以下编译错误:
LRIterator 不是抽象的,不会覆盖 java.util.Iterator 中的抽象方法 remove()
注意,实现是针对链表的
public Iterator iterator()
{
return new LRIterator() ;
}
private class LRIterator implements Iterator
{
private DLLNode place ;
private LRIterator()
{
place = first ;
}
public boolean hasNext()
{
return (place != null) ;
}
public Object next()
{
if (place == null) throw new NoSuchElementException();
return place.elem ;
place = place.succ ;
}
}
最佳答案
Java 8
在 Java 8 中 remove
method有一个抛出 UnsupportedOperatorException
的默认实现,因此在 Java 8 中代码可以正常编译。
Java 7 及以下
因为 Iterator
接口(interface)有一个名为 remove()
的方法,你必须实现它才能说你已经实现了 Iterator
界面。
如果您不实现它,该类将“缺少”方法实现,这只适用于抽象类,即延迟的类子类的一些方法的实现。
文档可能看起来令人困惑,因为它说 remove()
是一个“可选操作”。这仅意味着您实际上不必能够从底层实现中删除元素,但您仍然需要实现该方法。如果您不想从底层集合中实际删除任何内容,您可以像这样实现它:
public void remove() {
throw new UnsupportedOperationException();
}
关于Java Iterator实现编译错误: does not override abstract method remove(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425130/