繁体   English   中英

Java如何使用ASM删除字段?

[英]Java How to delete a Field Using ASM?

我需要使用ASM删除Class文件中的字段,但是我无法找到任何有效的方法,

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

在Collection上进行迭代时从Collection中删除某些东西是一个坏主意,并且每次都会抛出java.util.ConcurrentModificationException

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM