Список Java UnsupportedOperationException

Список Java UnsupportedOperationException

1. обзор

В этом кратком руководстве мы обсудим распространенныеException, которые могут возникнуть при работе с некоторыми API-интерфейсами большинства реализацийList -UnsupportedOperationException.

java.util.List имеет больше функций, чем может поддерживать обычныйrray. Например, с помощью только одного встроенного вызова метода можно проверить, находится ли определенный элемент внутри структуры. Обычно поэтому нам иногда нужно преобразоватьarray вList илиCollection.

Для введения в основную реализацию JavaList -ArrayList - обратитесь кto this article.

2. UnsupportedOperationExceptionс

Часто эта ошибка возникает, когда мы используем методasList() изjava.util.Arrays:

public static List asList(T... a)

Возвращает:

  • фиксированного размераList от размера данногоarray

  • элемент того же типа, что и в исходномarray, и это должен бытьObject

  • элементы в том же порядке as в исходном массиве

  • список, который являетсяserializable и реализуетRandomAccess

Поскольку T представляет собойvarargs, мы можем передать массив или элементы непосредственно в качестве параметров, и метод создаст инициализированный список фиксированного размера:

List flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

Мы также можем передать фактическийarray:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List flowerList = Arrays.asList(flowers);

Since the returned List is a fixed-size List, we can’t add/remove elements.

Попытка добавить больше элементов приведет кUnsupportedOperationException:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List flowerList = Arrays.asList(flowers);
flowerList.add("Celosia");

Корень этогоException заключается в том, что возвращаемый объект не реализует операциюadd() , так как это не то же самое, чтоjava.util.ArrayList.

ЭтоArrayList, отjava.util.Arrays.

Другой способ получить то же исключение - попытаться удалить элемент из полученного списка.

С другой стороны, есть способы получить изменяемыйList, если он нам понадобится.

Один из них - создатьArrayList или любой другой список непосредственно из результатаasList():

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List flowerList = new ArrayList<>(Arrays.asList(flowers));

3. Заключение

В заключение важно понимать, что добавление дополнительных элементов в список может быть проблематичным не только для неизменяемых списков.

Как всегда, доступен полный исходный код примеровover on GitHub.