Arrays.asList()与UnsupportedOperationException异常
发布日期:2022-02-22 18:04:21 浏览次数:13 分类:技术文章

本文共 1201 字,大约阅读时间需要 4 分钟。

一、Arrays.asList()返回结果的是什么?

让我们看看源码
public static 
List
asList(T... a) {
return new ArrayList<>(a);}
asList()返回了ArrayList,不过它不是我们熟悉的ArrayList,而是Arrays类中的内部类Arrays$ArrayList。下面让我们看看它是什么?
public class Arrays {
private static class ArrayList
extends AbstractList
implements RandomAccess, java.io.Serializable {
private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) {
a = Objects.requireNonNull(array); } ....省略 }}

二、Arrays$ArrayList使用add()的正确与否?

首先让我们来举个例子
String[] str = new String[] {
"you", "wu"}; List list = Arrays.asList(str); list.add("good");

add()可以正常工作吗?

答案是不能!抛出UnsupportedOperationException异常。

为什么会这样呢?
private static class ArrayList
extends AbstractList
implements RandomAccess, java.io.Serializable {
}

在Arrays$ArrayList的定义中它继承了AbstractList,在AbstractList中有这样一些方法

public boolean add(E e) {
add(size(), e); return true;}public void add(int index, E element) {
throw new UnsupportedOperationException();}

Arrays$ArrayList并没有重载这个方法,而是继承。这样就产生了异常。

转载地址:https://blog.csdn.net/dongli_1996/article/details/103672030 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:VARCHAR字段指定索引长度
下一篇:eclipse使用Data Source Explorer连接SQLite数据库

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月19日 17时58分21秒