2017-04-22 120 views
0

我需要删除字段在类文件中使用ASM,但是我无法找到任何工作,Java如何使用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 + " ***"); 
    } 
} 

它给了我一个Exeption: DELETED最大 java.util.ConcurrentModificationException

+0

参见[这里](https://stackoverflow.com/a/223929/5128464)... – vlp

回答

1

删除在迭代时收集一些东西是个不错的主意,并且每次会抛出java.util.ConcurrentModificationException

如果您使用Java 8或更新版本,请考虑使用Collection::removeIf并给它一个谓词lambda以选择要删除的项目。

你的情况,这可能工作:

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