Java list 异常 UnsupportedOperationException

概述

本节将讨论一个常见的 Java 异常 java.lang.UnsupportedOperationException,在使用某些 List 的 API 时,可能会发生 UnsupportedOperationException

java.util.List 比普通的数组 array 有更多的功能,因此,我们经常将数组转换为 List 或者 Collection对象.

关于快速初始化 List,这里有介绍 一行代码初始化ArrayList

异常 UnsupportedOperationException

发生此错误的常见方式是当我们使用 java.util.Arrays 中的 asList() 方法时:
public static List asList(T... a)
请注意该方法的返回值:

  • 固定大小(不可变数组)
  • 与原数组中元素类型相同
  • 与原数组中元素顺序相同
  • 实现了 Serializable 和 RandomAccess,可序列化与随机访问

参数 T 是变长参数 varargs ,使用时可以直接传值:
List<String> students = Arrays.asList("Angle", "Bill", "Cicy", "Duck");
或者传入一个数组:

String[] students = { "Angle", "Bill", "Cicy", "Duck"};
List<String> studentList = Arrays.asList(flowers);

由于生成的 List 是固定大小的,因此不能进行 添加 或者 删除 操作。
studentList.add("Ela");
尝试添加元素,将会导致异常 UnsupportedOperationException
出现该异常的原因是生成的 List 没有实现 add() 方法,它并不是我们熟知的 java.util.ArrayList,而是 java.util.Arrays中的 ArrayList
当然,如果你尝试从中删除一个元素,也会导致异常 UnsupportedOperationException

那么,如何将上面的代码改造成可以修改的 List ?

String[] students = { "Angle", "Bill", "Cicy", "Duck"};
List<String> studentList = new ArrayList<>(Arrays.asList(flowers));

稍加修改,就能得到可变列表 List。

转载请注明出处:码谱记录 » Java list 异常 UnsupportedOperationException
标签: