当前位置: 首页 > 面试题库 >

Java List.add()UnsupportedOperationException

慕容安易
2023-03-14
问题内容

我尝试将对象添加到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返回的Arrays.asList():它被记录为不支持任何结构修改(即,删除或添加元素)(强调我的意思):

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

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

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

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

seeAlso = new ArrayList<>(seeAlso);


 类似资料:
  • 问题内容: 我正在为接下来的2个月内的OCPJP 8考试做准备,目前我受到了我的关注,因为我不明白为什么 这显然要编译OK!但是当您运行它时,您会看到这样的异常 我在这里需要一些帮助,以了解为什么asList方法不能与removeIf一起使用?我假设它将返回一个实现removeIf方法的ArrayList实例! 任何答案将不胜感激。 干杯! 问题答案: 生成一个列表,从该列表中无法删除元素,因此引

  • 问题内容: 我正在尝试从中删除一些元素,但即使是最简单的示例,如本答案或本示例中的示例,也将无法使用。 使用法线代替a 并没有帮助。我想念什么?我正在使用Java 7。 问题答案: 返回由原始数组支持的列表。您对列表所做的更改也将反映在您传入的数组中。由于您无法向数组添加或删除元素,因此对列表进行这种创建也是不可能的,这就是调用失败的原因。如果要能够动态添加和删除元素,则需要使用(,等)的不同实现

  • 问题内容: 在我的代码中,我有一个。列表项的上下文菜单选项之一是“删除”,它会打开一个对话框以确认操作。我打算通过首先删除数据库中的项目数据,然后从中将其删除来实现此功能。是从中将其删除… 任何帮助表示赞赏。谢谢! 问题答案: 当您使用数组初始化时,似乎出现了此问题。尝试使用初始化它。参考:为什么一个人不能从ArrayAdapter中添加/删除项目?

  • 问题内容: 我不太清楚该在哪里抛出该异常。 例如,我正在实现接口,并且不希望任何人调用该方法: Future#get(long,TimeUnit)。 所以,我可以扔吗? 事情是方法的规范并没有说明抛出异常。反过来,例外 抛出以指示不支持请求的操作。 类UnsupportedOperationException 我的意思是,如果您不希望调用它,通常会抛出它,否则可能会因为不是所有方法都已实现而被认为

  • 问题内容: 这是我遵循的使用自定义Listview适配器的教程。我遇到的问题是,当我尝试清除适配器时,应用程序崩溃并抛出 更新的代码: 问题答案: 环顾四周,似乎是使用数组初始化适配器。请参阅带有ArrayAdapter.remove的UnsupportedOperationException和无法在ListView中修改ArrayAdapter:UnsupportedOperationExcep

  • 问题内容: 我无法将JDBC连接到我的数据库,出现以下错误 问题答案: 根据stacktrace的说明,您使用的MySQL Connector / J版本使用的是Android不支持的功能(可能是named组)。解决方法是使用MySQL Connector / J的5.1.x版本而不是8.0.x版本。 但是,您不应使用Android应用程序中的JDBC。它是不安全的,并且通常无法直接连接到数据库。

  • 问题内容: 尝试添加另一个列表时抛出List.addAll 。 在循环中,我在做, 从文件中读取 supportType 。 但是第2行抛出一个,但是我无法确定为什么? 我要在列表中添加另一个列表,那么为什么不支持此操作? 问题答案: 返回一个固定大小的列表,该列表由数组支持,并且您不能向其中添加元素。 您可以创建一个可修改的列表以进行工作:

  • 问题内容: 我有这种方法,它使用字符串的可变参数,从中创建一个列表,然后尝试删除列表的第一个元素。 但是,一旦被调用,就会抛出一个。我的猜测是返回的List- Type不支持remove方法。我对么?我有什么选择? 问题答案: 仅在数组周围提供薄包装。该包装器使您可以使用API 对阵列执行 大多数 操作。JavaDoc的引文: 返回由指定数组支持的 固定大小的 列表。[…]此方法充当基于数组的AP