0
点赞
收藏
分享

微信扫一扫

Arrays.asList报错:java.lang.UnsupportedOperationException


问题描述

以下代码中,给List对象添加元素的时候,会报错

package com.example;

import java.util.Arrays;
import java.util.List;

public class Demo {
public static void main(String[] args) {

List<String> list = Arrays.asList("Tom", "Jack", "Steve");

System.out.println(list);
// [Tom, Jack, Steve]

list.add("Jone");

System.out.println(list);

}
}

报错信息

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.example.Demo.main(Demo.java:16)

原因分析

查看源码,发现​​Arrays.asList​​​确实返回了​​ArrayList​​,代码应该没有问题

public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}

继续查看源码,发现

// Arrays.asList 返回的是内部类
java.util.Arrays.ArrayList

// 我们需要的是
java.util.ArrayList

解决方法

类型转换即可

package com.example;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Demo {
public static void main(String[] args) {

List<String> list = new ArrayList<>(Arrays.asList("Tom", "Jack", "Steve"));

System.out.println(list);
// [Tom, Jack, Steve]

list.add("Jone");

System.out.println(list);
// [Tom, Jack, Steve, Jone]

}
}

参考
​java.lang.UnsupportedOperationException的解决方法​​


举报

相关推荐

0 条评论