Java List.add() UnsupportedOperationException

标签 java list exception arraylist unsupportedoperation

我尝试将对象添加到 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 :据记录支持任何结构修改(即删除或添加元素)(强调我的):

Returns a fixed-size list backed by the specified array.

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

您可以通过阅读 UnsupportedOperationException 的文档来了解这一点和List.add() ,它将其记录为“(可选操作)”。 List 文档顶部解释了该短语的确切含义。

作为解决方法,您可以将列表的副本创建为已知可修改的实现,例如 ArrayList:

seeAlso = new ArrayList<>(seeAlso);

关于Java List.add() UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55200390/

相关文章:

java - JUnit 类型安全的 assertEquals

java - 无法导入具有某些属性的 ldif 文件

java - @version 标签是否应该表示该源文件所属的工件的版本,或者该文件上次更改时的版本?

list - 什么是 Haskell 的流融合

java - 使用 FileUtils.copyFile 复制文件

linux - 为什么异常处理程序要查找系统调用表?

java inline Streams 和 Optional<T> 在编译时

python - 如何对PIL图像的所有像素求和?

Python从具有重复键的列表创建嵌套字典

java.util.ConcurrentModificationException问题