Java List.add()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(Unknown Source) java.util.AbstractList.add(Unknown Source) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
并非每个List
实现都支持add()
方法。
一个常见的例子是由Arrays.asList()
返回的List
:它被logging为不支持任何结构修改(即删除或添加元素)(强调我的):
返回由指定数组支持的固定大小的列表。
即使这不是您要修改的特定List
,答案仍适用于其他不可变的List
实现,或只允许一些选定的更改。
您可以通过阅读UnsupportedOperationException
和List.add()
的文档来了解这一点,将文档logging为“(可选操作)”。 这个短语的确切含义在List
文档的顶部解释。
作为一种解决方法,您可以创build一个列表副本到一个已知可修改的实现,如ArrayList
:
seeAlso = new ArrayList<>(seeAlso);
你必须初始化你的列表seeAlso:
List<String> seeAlso = new Vector<String>();
要么
List<String> seeAlso = new ArrayList<String>();
您不能修改LDAP查询的结果。 你的问题在这一行:
seeAlso.add(groupDn);
seeAlso列表是不可修改的。