— и сразу узнаёте, что так делать было нельзя :)
Отхватывать исключение UnsupportedOperationException в рантайме при вызове метода, который по всем ожидания должен быть реализован, так как есть в интерфейсе — вообще не круто, не для того джава придумана. А причина хитрее: не "метод интерфейса не реализован", ведь это невозможно. Просто оба этих метода используют Iterator.remove, который в является дефолтным и сходу бросает эксепшн в дефолтной реализации (!) То есть реализовывать этот метод не обязательно, и любой наследник Iterator иметь неожидаемое поведение. Скорее всего этот очевидный костыль возник по историческим причинам. Нужно было по-хорошему разделить Итератор на 2 интерфейса — для неизменяемого обхода коллекции и для изменяемого, наследующегося от первого. Может быть в более поздних версиях пофиксили, я сижу на 8
Обсуждают сегодня