温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 在Java中使用Arrays.asList上出现UnsupportedOperationException错误如何解决

在Java中使用Arrays.asList上出现UnsupportedOperationException错误如何解决

发布时间:2021-04-19 16:36:54 来源:亿速云 阅读:159 作者:Leah 栏目:开发技术

本篇文章给大家分享的是有关在Java中使用Arrays.asList上出现UnsupportedOperationException错误如何解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Java可以用来干什么

Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。

代码展示:

   // 这里隐藏了查询条件,所以就写死了
        List<String>  performId=new ArrayList<>();
        performId.add("701728881476112384");
        performId.add("701728881497083904");
        String[] agentIds = StringUtils.split(agentId, ",");
        List<String> agentIdList = Arrays.asList(agentIds);
        // 后面同事没有注意,就直接展示查询出来就加入
        agentIdList.addAll(performId);

原因分析:

于是我们查看了源码,通过**Arrays.asList(T …a)**创建的 **return new ArrayList<>(a);**以为是java.util包下的,所以就对它增删改了。查看源码发现,该方法并不支持增删改 源码如下:

 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);
        }
        @Override
        public int size() {
            return a.length;
        }
        @Override
        public Object[] toArray() {
            return a.clone();
        }
        @Override
        @SuppressWarnings("unchecked")
        public <T> T[] toArray(T[] a) {
            int size = size();
            if (a.length < size)return Arrays.copyOf(this.a, size,(Class<? extends T[]>) a.getClass());
            System.arraycopy(this.a, 0, a, 0, size);
            if (a.length > size) a[size] = null;
            return a;
        }
        @Override
        public E get(int index) {
            return a[index];
        }
        @Override
        public E set(int index, E element) {
            E oldValue = a[index];
            a[index] = element;
            return oldValue;
        }

        @Override
        public int indexOf(Object o) {
            E[] a = this.a;
            if (o == null) {
                for (int i = 0; i < a.length; i++)
                    if (a[i] == null) return i;
            } else {
              for (int i = 0; i < a.length; i++)
                   if (o.equals(a[i])) return i;
            }
            return -1;
        
        @Override
        public boolean contains(Object o) {
            return indexOf(o) != -1;
        }
        @Override
        public Spliterator<E> spliterator() {
            return Spliterators.spliterator(a, Spliterator.ORDERED);
        }
        @Override
        public void forEach(Consumer<? super E> action) {
            Objects.requireNonNull(action);
            for (E e : a) {
                action.accept(e);
            }
        }
        @Override
        public void replaceAll(UnaryOperator<E> operator) {
            Objects.requireNonNull(operator);
            E[] a = this.a;
            for (int i = 0; i < a.length; i++) {
                a[i] = operator.apply(a[i]);
            }
        }

        @Override
        public void sort(Comparator<? super E> c) {
            Arrays.sort(a, c);
        }
    }

通过以上源码发现,Arrays内部实现的ArrayList并未实现增删改等的操作,继承了 AbstractList.class 类中抛出的 UnsupportedOperationException异常。源码如下:

##只粘贴了部分源码,详情可以去AbstractList.class中查看
    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

以上就是在Java中使用Arrays.asList上出现UnsupportedOperationException错误如何解决,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI