问题
我尝试将对象添加到aList<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)
#1 热门回答(287 赞)
并非每个List
实现都支持theadd()
方法。
一个常见的例子是List
返回Arrays.asList()
:记录而不是以支持任何结构修改(即删除或添加元素)(强调我的):
返回由指定数组支持的固定大小列表。
即使这不是你要修改的具体内容,但答案仍然适用于其他List
实现,这些实现是不可变的或仅允许某些选定的更改。
你可以通过阅读UnsupportedOperationException
和List.add()
的文档来了解这一点,该文档将其记录为"(可选操作)"。这个短语的确切含义在List
文档的顶部解释。
作为一种解决方法,你可以将列表的副本创建为已知可修改的实现,如ArrayList
:
seeAlso = new ArrayList<>(seeAlso);
#2 热门回答(3 赞)
你必须初始化List seeAlso:
List<String> seeAlso = new Vector<String>();
要么
List<String> seeAlso = new ArrayList<String>();
#3 热门回答(-1 赞)
你无法修改LDAP查询的结果。你的问题在于这一行:
seeAlso.add(groupDn);
seeAlso列表是不可修改的。