Есть код:
List
Как мы вообще присваиваем c2 значение? На что мы ссылаемся, если Array.asList(T... a) возвращает
Ответ
Arrays.asList - возвращает список фиксированного размера. Поэтому нельзя ни добавлять, ни удалять. Чтобы как-то манипулировать элементами, придется оборачивать в новый список без фиксированного размера:
// List
Если углубиться:
Во внутренностях метод Arrays.asList возвращает следующее:
return new ArrayList<>(a);
но(!!!) возвращает он ArrayList не тот, который находится в пакетеjava.util.ArrayList а тот, который определен как внутренний класс внутри самого java.util.Arrays;. Выглядит он так:
private static class ArrayList
Как видим, эта внутренняя реализация наследуется от AbstractList, в котором по дефолту определены некоторые методы в таком виде
public boolean add(E e) {
add(size(), e);
return true;
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
Вот и получается, что вроде как вернули ArrayList, но на самом деле не тот лист, который ожидали (java.util.ArrayList), а эмуляцию.
О том, что такое
Комментариев нет:
Отправить комментарий