Нежелательное исключение, выброшенное Коллекциями - PullRequest
1 голос
/ 07 января 2020

Из спецификаций Collections.nCopies():

"Возвращает неизменный список, состоящий из n копий указанного объекта."

Поэтому, исходя из моего понимания, его итератор должен throw UnsupportedOperationException

Однако его итератор не бросает UnsupportedOperationException, но бросает IllegalStateException

 public class Main {
        public static void main(String args[]) throws Exception {
            final List<String> c = Collections.nCopies(1, "copies");
            c.iterator().remove();
        }
    }

Почему это ведет себя так? Пожалуйста, помогите мне понять это поведение.

1 Ответ

3 голосов
/ 07 января 2020

В документации по исключениям Iterator.remove написано:

IllegalStateException - если следующий метод еще не был вызван или метод remove уже был вызван после последнего вызов следующего метода

Это то, что происходит в вашем случае. Проверяя ваш код, если я сначала позвоню next, я получу ожидаемое UnsupportedOperationException:

final List<String> c = Collections.nCopies(1, "a");
Iterator<String> iterator = c.iterator();

iterator.next();
iterator.remove(); //java.lang.UnsupportedOperationException
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...