I'm getting the following error while implementing the java.util.Iterator interface in my class:
java: MenuIterator is not abstract and does not override abstract method remove() in java.util.Iterator.
import java.util.Iterator;
public class MenuIterator implements Iterator<MenuItem> {
private final MenuItem[] items;
private int position = 0;
public MenuIterator(MenuItem[] menuItems) {
this.items = menuItems;
}
public boolean hasNext() {
return position < items.length && items[position] != null;
}
public MenuItem next() {
return items[position++];
}
}
remove() method is a default method in the Iterator interface, as well as forEachRemaing() method.
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
However, I am not forced to implement forEachRemaing(), but I do have to implement remove(). Also, the code works without implementing remove() if I run it from Eclipse, but gives an error in IntelliJ IDEA.
Does anyone know why I would need to provide an implementation for the default remove() method? Why should I provide it for one method and not for another? And why does it work without implementation in one IDE and not in another?