[英]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.