Java如何使用ASM删除字段?

时间:2017-04-22 17:51:18

标签: java java-bytecode-asm

我需要在使用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

1 个答案:

答案 0 :(得分:1)

在迭代过程中从集合中删除某些内容是一个坏主意,每次抛出java.util.ConcurrentModificationException

如果您使用的是Java 8或更高版本,请考虑使用Collection::removeIf并为其指定谓词lambda以选择要删除的项目。

在您的情况下,这可能有效:

classNode.fields.removeIf(field -> field.name.equals("max") && field.value.equals(30));