java.lang.UnsupportedOperationException解决方法

java.lang.UnsupportedOperationException解决方法

  • 先放错误信息
  • 业务场景
  • 报错分析
    • 先看报错代码位置
      • 进入源码查看
      • 至此 真相大白
  • 解决方法
  • 总结

先放错误信息

java.lang.UnsupportedOperationException解决方法_第1张图片

业务场景

已知有学生 张三李四王五赵六 等人
private List nameList = Arrays.asList("张三", "李四", "王五", "赵六");
现有一名考生 如考试分数大于等于80分 即编入该班级
if (score >= 80) { nameList.add("七七"); }

报错分析

先看报错代码位置

在类 MainActivity 中的第32行代码,OK,咱们进入源码查看
java.lang.UnsupportedOperationException解决方法_第2张图片

进入源码查看

先看 Arrays.asList 方法,可以看到这里返回值是new了一个 ArrayList ,但此 ArrayList 是Arrays类本身的内部类,通过查找发现此类中并没有add方法,那么咱们可以看到此 ArrayList 类继承了 AbstractList ,咱们进入 AbstractList 类查看即可找到原因
java.lang.UnsupportedOperationException解决方法_第3张图片

通过查找发现此类中并没有add方法
java.lang.UnsupportedOperationException解决方法_第4张图片

进入 AbstractList 类查看,可以看到该方法会抛此异常
在这里插入图片描述

至此 真相大白

此时咱们进入 ArrayList 源码中查看,可以看出是重写了add方法,至此 真相大白
java.lang.UnsupportedOperationException解决方法_第5张图片

解决方法

既然已知原因,只需类型转换即可
private List nameList = new ArrayList<>(Arrays.asList("张三","李四","王五","赵六"));
在这里插入图片描述

总结

  • 在使用 Arrays.asList() 方法生成的 List 中的 add()、remove() 等方法时运行报异常,这是由于 Arrays.asList() 返回的是 Arrays 本身的内部ArrayList类,而不是 java.util.ArrayList 类。
  • Arrays 的内部类 ArrayList 和 java.util.ArrayList 虽然都是继承 AbstractList,但 java.util.ArrayList 重写了这些方法而 Arrays 的内部ArrayList 类没有重写这些方法,所以会抛出异常。

你可能感兴趣的:(错误解决方法,java,Exception,异常解决)