UnsupportedOperationException

    public static void main(String[] args)  {
        List<Integer> list = Arrays.asList(1, 2, 3, 4);
        list.remove(1);
    }
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.remove(AbstractList.java:161)
	at com.lfweixiao.Test01.main(Test01.java:12)

原因,处理办法

原因: 这里的Arrays.asList返回的是 Arrays 中的 内部类 ArrayList此类继承了AbstractList却没重写 remove(int index)、set(int index, E element) 、add(int index, E element)

**解决方式:**直接 new 来创建 ArrayList

分析过程

  1. 通过异常详细我们知道是 不支持操作的异常 出现在 12 行
    remove(1)爆出的

    1. 这个 remover 方法应该有所问题
    2. 需要去类中找实体方法 看看
  2. 进入 Arrays.asList

      public static <T> List<T> asList(T... a) {
            return new ArrayList<>(a);//此处new 了一个 arraylist。点进去看看
        }
    
    //这里看的就有点不对了,这里是个静态内部类,继承了abstracList 
    private static class ArrayList<E> extends AbstractList<E>
            implements RandomAccess, java.io.Serializable
        {
            private static final long serialVersionUID = -2764017481108945198L;
            private final E[] a;
    
            ArrayList(E[] array) {
                a = Objects.requireNonNull(array);
            }
    
    //进入AbstractList
    //发现了报错了地方
    public E remove(int index) {
            throw new UnsupportedOperationException();
        }
    
    //不知如此 下面还有几个方法都在报错
     public E set(int index, E element) {
            throw new UnsupportedOperationException();
        }
    public void add(int index, E element) {
            throw new UnsupportedOperationException();
        }
    

好了我们知道,抽象类中的方法体,都在报错,那我们在回到实体类中看看方法有没被重写

UnsupportedOperationException

到这里问题就很清楚了!

上一篇:题解 小L的疑惑


下一篇:vue基础二