Класс UnsupportedOperationException является членом Java Collections Framework с версии Java 1.2. Он расширяет RuntimeException; следовательно, это непроверяемое исключение, и его не нужно объявлять в предложении throws метода или конструктора.
public class UnsupportedOperationException extends RuntimeException
1. Основная причина UnsupportedOperationException
Как следует из названия, UnsupportedOperationException возникает, когда запрошенная операция не поддерживается в классе или интерфейсе. Это распространенное исключение, которое возникает при работе с такими коллекциями, как List, Queue, Set и Map. Например, если мы пытаемся изменить неизменяемую Map или List , то будет выброшено это исключение.
Одно из самых распространенных случаев — при использовании метода Arrays.asList(). Поскольку метод asList() возвращает неизменяемый список фиксированного размера, методы add() или remove() не поддерживаются. Если мы попытаемся добавить или удалить элементы из этого списка, он выдаст исключение UnsupportedOperationException.
List<String> list = Arrays.asList(new String[] { "a", "b", "c" });list.add("d");//orlist.remove("a");
Мы получим исключение UnsupportedOperationException в консоли.
Exception in thread "main" java.lang.UnsupportedOperationExceptionat java.base/java.util.AbstractList.add(AbstractList.java:153)at java.base/java.util.AbstractList.add(AbstractList.java:111)at UnsupportedOperationExceptionExample.main(UnsupportedOperationExceptionExample.java:8)
2. Разрешение UnsupportedOperationException
UnsupportedOperationException можно разрешить с помощью изменяемой коллекции, например ArrayList. Если у нас есть неизменяемые коллекции, мы можем обернуть их в изменяемый альтернативный класс коллекции.
Например, неизменяемый список в предыдущем примере можно передать новому объекту ArrayList, изменяемой коллекции.
См. также: Java Arrays.asList() против new ArrayList()
List<String> list = Arrays.asList(new String[] { "a", "b", "c" });List<String> arraylist = new ArrayList<>(list);//Works finearraylist.add("d");arraylist.remove("a");
Здесь новый объект ArrayList создается с использованием неизменяемого списка, возвращаемого методом Arrays.asList(). Когда в ArrayList добавляется новый элемент, он работает так, как и ожидалось, и разрешает исключение UnsupportedOperationException.
3. Заключение
В этой статье мы узнали об исключении UnsupportedOperationException, каковы причины его возникновения и как предотвратить его возникновение в нашем коде.