最近遇到有个问题,由上游传过来的 list,在执行 set() 方法时报错
1 | java.lang.UnsupportedOperationException: null |
List 的实现类都继承了 AbstractList 这个抽象类,但不是每个具体实现类都实现了所有的方法
上游传过来的 list,实现类使用的是 Collections.singletonList,如下
1 | List<TestDto> list1 = Collections.singletonList(testConfig); |
以具体的 demo 来看
1 | TestDto testConfig = new TestDto(); |
Collections.singletonList 的返回类是 Collections 里面的内部实现类 java.util.Collections.SingletonListArrays.asList 返回类是 Arrays 里面的内部实现类 java.util.Arrays.ArrayListnew ArrayList<>() 的返回类是 java.util.ArrayList
singletonList 没有实现 set、add、remove 等操作方法
Arrays.ArrayList 没有实现 add、remove 等操作方法
new ArrayList<>() 都实现了
所以 singletonList 会在进行 set() 操作时报错,修改上游代码为 new ArrayList<>() 即可