一尘不染

Java List.add()UnsupportedOperationException

java

我尝试将对象添加到List<String>实例,但会引发UnsupportedOperationException。有人知道为什么吗?

我的Java代码:

String[] membersArray = request.getParameterValues('members');
List<String> membersList = Arrays.asList(membersArray);

for (String member : membersList) {
    Person person = Dao.findByName(member);
    List<String> seeAlso;
    seeAlso = person.getSeeAlso();
    if (!seeAlso.contains(groupDn)){
        seeAlso.add(groupDn);
        person.setSeeAlso(seeAlso);
    }
}

错误信息:

java.lang.UnsupportedOperationException
    java.util.AbstractList.add(未知源)
    java.util.AbstractList.add(未知源)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

阅读 324

收藏
2020-03-12

共1个答案

一尘不染

并非每个List实现都支持该add()方法。

一个常见的示例是通过以下方式List返回的Arrays.asList():它被记录为不支持任何结构修改(即,删除或添加元素)(强调我的意思):

返回由指定数组支持的固定大小的列表。

即使这不是List你要修改的特定内容,答案仍然适用于List不可变或仅允许某些选定更改的其他实现。

你可以通过阅读的文档,了解这个UnsupportedOperationExceptionList.add(),其中记录了这是一个“(可选操作)”。该短语的确切含义在List文档顶部进行了说明。

解决方法是,你可以将列表的副本创建到已知的可修改实现中,例如ArrayList

seeAlso = new ArrayList<>(seeAlso);
2020-03-12