Por ejemplo, si I ejecutar un script Groovy, que modifica la clase meta String, la adición de un foo método()¿Cómo deshago los cambios de metaclase después de ejecutar GroovyShell?
GroovyShell shell1 = new GroovyShell();
shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}");
cuando creo un nuevo shell después de eso y ejecutarlo, los cambios son todavía allí
GroovyShell shell2 = new GroovyShell();
Object result = shell2.evaluate("'a'.foo()");
¿Hay alguna manera de deshacer todos los cambios de clase meta después de ejecutar GroovyShell? Probé
shell1.getClassLoader().clearCache();
y
shell1.resetLoadedClasses();
pero que no hice un cambio.
¿Puedo hacer esto con un messloader de clase? – cretzel