String[] queryNames = request.getParameterValues("queryName");
List<String> queryNamesAry = Arrays.asList(queryNames);
for(int idx=0; idx<queryNamesAry.size(); idx++) {
    String queryName = queryNamesAry.get(idx);
    if(StringUtils.isEmpty(queryName) || StringUtils.isEmpty(queryValue)) {
        queryNamesAry.remove(idx);
        queryValuesAry.remove(idx);
        idx--;
    }
}

执行出错,错误信息如下:

Caused by: java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:161)
    at com.qq.action.QqProjSelectAction.fullSearchList(QqProjSelectAction.java:37)
    ... 131 more

 

问题原因:

Arrays.asList()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。

Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等 method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int)等,所以throw UnsupportedOperationException。

 

解决办法:

解决方法是使用Iterator,或者转换为ArrayList。

List<String> queryNamesAry = new ArrayList(Arrays.asList(queryNames));

相关文章:

  • 2022-12-23
  • 2022-02-16
  • 2021-11-06
  • 2021-10-18
  • 2021-05-18
猜你喜欢
  • 2022-01-08
  • 2021-04-15
  • 2022-01-18
  • 2021-05-20
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案