📜  如何解决Java List UnsupportedOperationException?

📅  最后修改于: 2022-05-13 01:54:53.738000             🧑  作者: Mango

如何解决Java List UnsupportedOperationException?

UnsupportedOperationException 是我们在使用列表实现的某些 API 时发生的常见异常之一。抛出它表示不支持请求的操作。

此类是Java集合框架的成员。

所有Java错误都实现Java.lang.Throwable 接口或从另一个类继承。此异常的层次结构是-

句法:

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