Java Iterator实现编译错误: does not override abstract method remove()

标签 java iterator

为什么会出现以下编译错误:

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/

相关文章:

javascript - XMLHttpRequest js --> java --> js

java - 连接到您的 RDS 数据库实例

java - 如何使用方法引用表示法(Class::method)在 Java 中将方法作为参数传递?

C++ 迭代器错误

c++ - 如何将 map<string, map<int, int>> 的内容打印到 cout 中?

python - 如何迭代切片?

java - 为什么每次打开 Activity 时整型变量不会加 1?

java - 使用 apache camel 测试回滚事务

c++ - 寻找特殊的 C++ 数据结构

java - 迭代 CopyOnWriteArrayList 时出现 UnsupportedOperationException