Java Iterator实现编译错误:不覆盖抽象方法remove()

为什么我会收到以下编译错误

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接口有一个名为remove()的方法,您必须实现该方法才能说明您已经实现了Iterator接口.

如果你没有实现它,那么类“缺少”一个方法实现,这对于抽象类,即将某些方法的实现推迟到子类的类来说是可以的.

文档可能看起来令人困惑,因为它说remove()是一个“可选操作”.这只意味着您不必实际能够从底层实现中删除元素,但仍需要实现该方法.如果您不想从底层集合中删除任何内容,则可以像下面这样实现:

public void remove() {
    throw new UnsupportedOperationException();
}

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...