没有任何循环的List.addAll方法上的Java ConcurrentModificationException
我在下面的代码段中引发了ConcurrentModificationException,根据我所读到的导致此错误的原因(修改您有一个打开的迭代器的内容),这是没有意义的:没有任何循环的List.addAll方法上的Java ConcurrentModificationException,java,list,Java,List,我在下面的代码段中引发了ConcurrentModificationException,根据我所读到的导致此错误的原因(修改您有一个打开的迭代器的内容),这是没有意义的: List kibanaFields=Arrays.asList(KibanaRow.class.getSuperclass().getDeclaredFields()); addAll(Arrays.asList(KibanaRow.class.getDeclaredFields()); 第二行,就是它发生的地方。 我不明白
List kibanaFields=Arrays.asList(KibanaRow.class.getSuperclass().getDeclaredFields());
addAll(Arrays.asList(KibanaRow.class.getDeclaredFields());
第二行,就是它发生的地方。
我不明白这件事。。即使第一行内部实现了某种迭代器,在返回第二个方法运行时也应该关闭它
这里的目的是获取字段名列表,然后在每个
KibanaRow
字段上添加@JsonProperty
注释的值。我不理解CME的具体原因。如果你给我们看stacktrace我们也许能解决
但是,您尝试执行的操作无论如何都不会起作用:
List<Field> kibanaFields
Arrays.asList(KibanaRow.class.getSuperclass().getDeclaredFields());
如果KibanaRow.class.getDeclaredFields()
返回一个非空数组,那么这将尝试向kibanaFields
添加更多元素。不可能。随后应出现例外情况
我发现的问题的一个解决方案是将asList
结果的内容复制到一个新的ArrayList
;e、 g
List<Field> kibanaFields = new ArrayList<>(Arrays.asList(....));
List kibanaFields=newarraylist(Arrays.asList(..);
谢谢,这解决了CME问题,显然避免了另一个错误。也许CME是添加到固定阵列的例外?我不知道。。
kibanaFields.addAll(Arrays.asList(KibanaRow.class.getDeclaredFields()));
List<Field> kibanaFields = new ArrayList<>(Arrays.asList(....));