You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Java中调用add方法抛出的UnsupportedOperationException?

问题原因与修复方案

问题根源

异常java.lang.UnsupportedOperationException来自ImmutableCollections$AbstractImmutableCollection.add,说明你的Entity类中fields成员是一个不可变集合(比如通过List.of()、Collections.unmodifiableList()创建的只读集合)。而addMappedListField方法仅在fields为null时才创建可变的ArrayList,当fields已经是不可变集合时,直接调用add就会触发该异常。

修复方案

方案1:修改addMappedListField方法,强制确保fields为可变集合

修改方法内的集合初始化逻辑,无论fields是否为null,都将其转换为可变的ArrayList:

public void addMappedListField(String collector) {
  EntityField field = new EntityField(collector.toLowerCase(), collector,
    RelationEnum.MANY_TO_ONE);
  field.setRealType(collector); // TODO: Fix this error
  // 确保fields是可变集合:如果是null或不可变集合,替换为新的ArrayList
  if (fields == null || !(fields instanceof ArrayList)) {
    fields = new ArrayList<>(fields != null ? fields : Collections.emptyList());
  }
  this.fields.add(field);
}

方案2:从源头初始化可变集合

检查Entity类中fields的初始化代码,确保一开始就使用可变集合,避免使用不可变集合创建方式:

// 正确的初始化方式(可变)
private List<EntityField> fields = new ArrayList<>();

// 错误的初始化方式(不可变,需要替换)
// private List<EntityField> fields = List.of();
// private List<EntityField> fields = Collections.unmodifiableList(new ArrayList<>());

补充说明

从异常栈来看,核心问题集中在Entity.fields的可变性上,优先处理上述两种方案即可解决当前报错。如果后续发现entities列表本身是不可变的,再针对性调整该集合的初始化逻辑。

内容的提问来源于stack exchange,提问作者Hamza Bousalih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:36:13