Давайте поговорим о Arrays.asList()

Большинство разработчиков, использующих Javaв качестве повседневного языка, в значительной степени знакомы с методом Arrays.asList(T… a) или использовали его во многих случаях.

Так что найдите минутку, чтобы посмотреть на следующий блок кода и попытаться подумать, что произойдет, если мы скомпилируем и выполним его.

Когда мы его скомпилируем, ошибок не будет. Однако это становится интересным после того, как мы его выполним. Для некоторых из нас результат не такой, как мы предполагали. Вот результат:

Почему здесь возникает UnsupportedOperationException? Ответ мы можем найти в документации Arrays.asList, поскольку там сказано: «Возвращает список фиксированного размера, поддерживаемый указанным массивом. (Изменения в возвращаемом списке «записываются» в массив.)». Это означает, что мы получаем список, который нельзя изменить, так как это список фиксированного размера. Внутри реализации метода asList он создает экземпляр ArrayList, используя этот массив объектов и возвращает его. Но как нельзя изменить ArrayList? Это потому, что мы получаем экземпляр java.util.Arrays.ArrayList, а не java.util.ArrayList. Просто распечатайте nameList.getClass(), и на выходе будет «class java.util.Arrays$ArrayList». Этот Arrays.ArrayList унаследован от java.util.AbstractList. Внутри AbstractListset, add, remove throws UnsupportedOperationException и Arrays.ArrayList переопределяют метод set, но не переопределяют методы add и remove. Поэтому всякий раз, когда мы создаем экземпляр списка из Arrays.asList, ни один элемент списка нельзя удалить или добавить, но можно заменить. При этом размер списка будет фиксированным.