java runtime_error ai_generated true

java.lang.UnsupportedOperationException:不可变列表无法修改

java.lang.UnsupportedOperationException: Immutable list cannot be modified

ID: java/unsupported-operation-exception-immutable-list

其他格式: JSON · Markdown 中文 · English
95%修复率
85%置信度
1证据数
2024-02-14首次发现

版本兼容性

版本状态引入弃用备注
Java 9 active
Java 11 active
Java 17 active
Java 21 active

根因分析

尝试修改通过 List.of()、Collections.unmodifiableList() 或 Stream.toList() 等方法创建的不可变集合,这些集合不支持 add、remove 或 set 操作。

English

An attempt was made to modify a collection that was created as immutable (e.g., via List.of(), Collections.unmodifiableList(), or Stream.toList()), which does not support add, remove, or set operations.

generic

官方文档

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/UnsupportedOperationException.html

解决方案

  1. If modification is needed, create a mutable copy of the immutable list using the ArrayList constructor, then modify the copy.
  2. Use Stream.collect(Collectors.toList()) to create a mutable list instead of Stream.toList() (which returns an immutable list in Java 16+).
  3. If the list is returned from a library and you must modify it, wrap it in a new ArrayList immediately after receiving it.

无效尝试

常见但无效的做法:

  1. 90% 失败

    Catching and ignoring the exception does not fix the logic; the modification is silently skipped, leading to data inconsistency.

  2. 100% 失败

    Adding @SuppressWarnings does not change the runtime behavior; the exception still occurs.

  3. 60% 失败

    Using ArrayList constructor on the immutable list creates a mutable copy, but if the code continues to use the original reference, the error persists.