java.lang.UnsupportedOperationException解决方法

今天做项目的时候遇到一个报错java.lang.UnsupportedOperationException,没看控制台报错的时候以为是空指针报错。可是经过debug发现栈中变量都没发现啥问题,其中报错的代码为

List<String> supEmailList = Arrays.asList(supEmails);
if (StringUtils.isNotBlank(user.getMail())) {
            supEmailList.add(user.getMail());
}

刚开始我一直没看出有啥问题,但是也确实对supEmailList 这个变量的add方法是否能这样使用存在怀疑,于是我查询了一下资料证实了我的想法:调用Arrays.asList()生产的List的add、remove方法时报异常,这是因为Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重写了这些方法而Arrays的内部类ArrayList没有重写,所以会抛出异常。解决方法如下:

List<String> tempList = Arrays.asList(supEmails);
        List<String> supEmailList = new ArrayList<>(tempList);
        if (StringUtils.isNotBlank(user.getMail())) {
            supEmailList.add(user.getMail());
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章