我尝试将对象添加到List<String>实例,但会引发UnsupportedOperationException。有人知道为什么吗?
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)
并非每个List实现都支持该add()方法。
List
add()
一个常见的示例是通过以下方式List返回的Arrays.asList():它被记录为不支持任何结构修改(即,删除或添加元素)(强调我的意思):
Arrays.asList()
返回由指定数组支持的固定大小的列表。
即使这不是List你要修改的特定内容,答案仍然适用于List不可变或仅允许某些选定更改的其他实现。
你可以通过阅读的文档,了解这个UnsupportedOperationException和List.add(),其中记录了这是一个“(可选操作)”。该短语的确切含义在List文档顶部进行了说明。
List.add()
解决方法是,你可以将列表的副本创建到已知的可修改实现中,例如ArrayList:
ArrayList
seeAlso = new ArrayList<>(seeAlso);