Список 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.