Списък на Java UnsupportedOperationException

1. Общ преглед

В този бърз урок ще обсъдим често срещано изключение, което може да възникне при работа с някои API на повечето реализации на Списък - UnsupportedOperationException .

А java.util.List има повече функции от обикновен на rray може да подкрепи. Например само с едно вградено извикване на метод е възможно да се провери дали определен елемент е вътре в структурата. Поради това понякога трябва да преобразуваме масив в списък или колекция .

За въведение в основното изпълнение на Java List - ArrayList - вижте тази статия.

2. UnsupportedOperationException

Често се появява тази грешка, когато използваме метода asList () от java.util.Arrays:

public static List asList(T... a)

Той връща:

  • фиксиран размер Списък както на размера на даден масив
  • елемент от същия тип като този в оригиналния масив и той трябва да е обект
  • елементи в същия редкакто в оригиналния масив
  • списък, който е сериализуем и изпълнява RandomAccess

Тъй като T е varargs , можем да предадем масив или елементите директно като параметри и методът ще създаде инициализиран списък с фиксиран размер:

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

Можем да предадем и действителен масив :

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

Тъй като се върна Списъка е фиксиран размер Списък , не можем да Добавяне / Премахване на елементи .

Опитът за добавяне на повече елементи би причинил UnsupportedOperationException :

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

Коренът на това изключение е, че върнатият обект не изпълнява операцията add () , тъй като не е същият като java.util.ArrayList.

Това е ArrayList от java.util.Arrays.

Друг начин за получаване на същото изключение е като се опитате да премахнете елемент от получения списък.

От друга страна, има начини да получим изменяем списък, в случай че имаме нужда от него.

Един от тях е да се създаде ArrayList или всякакъв вид списък директно от резултата на asList () :

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

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

В заключение е важно да се разбере, че добавянето на повече елементи към списък може да бъде проблематично за не само неизменяеми списъци.

Както винаги, пълният изходен код на примерите е достъпен в GitHub.