Мне просто интересно, почему java.util.Scanner реализует java. util.Iterator?
Scanner
реализует метод remove и выдает UnsupportedOperationException.
Но не должен ли класс при реализации интерфейса выполнить контракт интерфейса?
Что такое использование iterator
и добавление метода, который генерирует исключение?
Почему бы не просто избежать реализации интерфейса и сохранить его простым?
Можно утверждать, что он определен так, чтобы класс, который мог бы расширять Scanner
, мог реализовать метод, например AbstractList имеет add метод, который вызывает UnsupportedOperationException
. Но AbstractList
является классом abstract
, тогда как Scanner
является классом final
.
Является ли это плохой проектной практикой?