如何解决Java List UnsupportedOperationException?
UnsupportedOperationException 是我们在使用列表实现的某些 API 时发生的常见异常之一。抛出它表示不支持请求的操作。
此类是Java集合框架的成员。
所有Java错误都实现Java.lang.Throwable 接口或从另一个类继承。此异常的层次结构是-
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.UnsupportedOperationException
句法:
public class UnsupportedOperationException
extends RuntimeException
发生此错误的主要原因是Java.util.Arrays 类的asList 方法返回一个ArrayList 的对象,该对象嵌套在Java.util.Arrays 类中。 ArrayList 扩展了Java.util.AbstractList 并且它没有实现添加或删除方法。因此,当在列表对象上调用此方法时,它会调用抛出此异常的 AbstractList 类的添加或删除方法。此外, asList 方法返回的列表是固定大小的列表,因此无法修改。
下面的示例将导致 UnsupportedOperationException 因为它试图将新元素添加到固定大小的列表对象
Java
import java.util.Arrays;
import java.util.List;
public class Example {
public static void main(String[] args)
{
String str[] = { "Apple", "Banana" };
List l = Arrays.asList(str);
System.out.println(l);
// It will throw java.lang.UnsupportedOperationException
l.add("Mango");
}
}
Java
import java.util.ArrayList;
import java.util.List;
import java.util.*;
public class Example {
public static void main(String[] args) {
String str[] = { "Apple", "Banana" };
List list = Arrays.asList(str);
List l = new ArrayList<>(list);
l.add("Mango"); // modify the list
for(String s: l )
System.out.println(s);
}
}
输出:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.add(AbstractList.java:153)
at java.base/java.util.AbstractList.add(AbstractList.java:111)
at Example.main(Example.java:14)
我们可以通过使用可以修改的可变 List 来解决这个问题,例如ArrayList 。我们使用之前使用的 Arrays.asList 方法创建一个 List 并传递该结果 List 以创建一个新的 ArrayList 对象。
Java
import java.util.ArrayList;
import java.util.List;
import java.util.*;
public class Example {
public static void main(String[] args) {
String str[] = { "Apple", "Banana" };
List list = Arrays.asList(str);
List l = new ArrayList<>(list);
l.add("Mango"); // modify the list
for(String s: l )
System.out.println(s);
}
}
Apple
Banana
Mango