错误内容如下:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.add(AbstractList.java:153)
at java.base/java.util.AbstractList.add(AbstractList.java:111)
at java.base/java.util.AbstractCollection.addAll(AbstractCollection.java:352)
at com.BasicHSFConsumer.main(BasicHSFConsumer.java:89)
实验1:
不会报错
List<String> missionNumbers = Collections.emptyList();
List<String> nums = new ArrayList<>();
List<String> collect1 = nums.stream().collect(Collectors.toList());
missionNumbers.addAll(collect1);
实验2:
会报错
List<String> missionNumbers = Collections.emptyList();
List<String> nums = new ArrayList<>();
nums.add("1");
List<String> collect1 = nums.stream().collect(Collectors.toList());
missionNumbers.addAll(collect1);
实验2:
不会报错
List<String> missionNumbers = new ArrayList<>();
List<String> nums = new ArrayList<>();
nums.add("1");
List<String> collect1 = nums.stream().collect(Collectors.toList());
missionNumbers.addAll(collect1);
原因是什么?
在编译阶段不会报错,调用的时候才会出现这个错误。但是返回的明明是ArrayList对象,为什么不支持大小可变的add或者remove操作呢?
原来这里并不是我们常用的ArrayList,而是private定义的一个内部类,只是名字也叫 ArrayList 而已,通过查看源码,这个类里面并没有add、remove等方法。
至此问题终于找到了,此ArrayList非彼ArrayList。