我需要在使用ASM的类文件中删除字段,但我无法找到任何有效的内容,
for(FieldNode field : classNode.fields) {
if(field.name.equals("max") && field.value.equals(30)) {
classNode.fields.remove(field);
System.out.println("***DELETED " + field.name + " ***");
}
}
它给了我一个执行:
DELETED max
java.util.ConcurrentModificationException
答案 0 :(得分:1)
在迭代过程中从集合中删除某些内容是一个坏主意,每次抛出java.util.ConcurrentModificationException
。
如果您使用的是Java 8或更高版本,请考虑使用Collection::removeIf并为其指定谓词lambda以选择要删除的项目。
在您的情况下,这可能有效:
classNode.fields.removeIf(field -> field.name.equals("max") && field.value.equals(30));