2017-04-22 5 views
0

Je dois supprimer un champ Dans un fichier de classe en utilisant ASM, mais je ne suis pas en mesure de trouver quelque chose qui fonctionne,Java Comment supprimer un champ en utilisant 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 + " ***"); 
    } 
} 

Son me donner un Exeption: SUPPRIME max java.util.ConcurrentModificationException

+0

Voir [ici] (https://stackoverflow.com/a/223929/5128464) ... – vlp

Répondre

1

Suppression quelque chose d'une collection en itérant sur elle est une mauvaise idée et à chaque fois jeter un java.util.ConcurrentModificationException.

Si vous utilisez Java 8 ou plus récent, veuillez utiliser Collection::removeIf et lui attribuer un prédicat lambda pour sélectionner les éléments à supprimer.

Dans votre cas, cela pourrait fonctionner:

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