为什么我会收到以下编译错误:
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(); }
原文地址:https://www.jb51.cc/java/127910.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。