Java 8
В Java 8 метод remove
имеет реализацию по умолчанию, которая выдает UnsupportedOperatorException
, поэтому в Java 8 код компилируется нормально.
Java 7 и ниже
Поскольку интерфейс Iterator
имеет метод, называемый remove()
, который вы должны реализовать, чтобы сказать, что вы реализовали интерфейс Iterator
.
Если вы не реализуете его, класс "пропустит" реализацию метода, что нормально только для абстрактных классов, то есть классов, которые откладывают реализацию некоторые методы для подклассов.
Документация может показаться запутанной, поскольку в ней говорится, что remove()
является "необязательной операцией". Это означает только то, что вам не нужно фактически удалять элементы из базовой реализации, но вам все равно нужно реализовать метод. Если вы действительно не хотите ничего удалять из базовой коллекции, вы реализуете это следующим образом:
public void remove() {
throw new UnsupportedOperationException();
}