Arrays.asList添加元素报java.lang.UnsupportedOperationException

问题现象

java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.yxxmg.collection.CollectionTest.test(CollectionTest.java:21)

Arrays.asList添加元素报java.lang.UnsupportedOperationException_第1张图片

问题分析

先分析下Arrays.asList,java.util.Arrays#asList

 @SafeVarargs
 @SuppressWarnings("varargs")
 public static <T> List<T> asList(T... a) {
     return new ArrayList<>(a);
 }
 private final E[] a;

 ArrayList(E[] array) {
     a = Objects.requireNonNull(array);
 }
  public boolean add(E e) {
      add(size(), e);
      return true;
  }
  public void add(int index, E element) {
    throw new UnsupportedOperationException();
 }

由此可以看出asList其实就是就是一个定长数组且不能被修改,类似apache commons-collections中的Collections.unmodifiableList()

解决方案

1.使用GuavaLists
Arrays.asList添加元素报java.lang.UnsupportedOperationException_第2张图片
2.使用Stream.of()操作
Arrays.asList添加元素报java.lang.UnsupportedOperationException_第3张图片3.使用Arrays.stream()
Arrays.asList添加元素报java.lang.UnsupportedOperationException_第4张图片4.使用new ArrayList<>(Collection c)
Arrays.asList添加元素报java.lang.UnsupportedOperationException_第5张图片

示例代码

https://gitee.com/youxiaxiaomage/java-practices/blob/master/yxxmg-java-helper/src/test/java/com/yxxmg/collection/CollectionTest.java

你可能感兴趣的:(java)