Ad esempio, se eseguire uno script Groovy, che modifica la Metaclasse String, aggiungendo un metodo foo()Come annullare le modifiche alla metadase dopo l'esecuzione di GroovyShell?
GroovyShell shell1 = new GroovyShell();
shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}");
quando si crea una nuova shell e dopo che eseguirlo, i cambiamenti sono ancora lì
GroovyShell shell2 = new GroovyShell();
Object result = shell2.evaluate("'a'.foo()");
C'è un modo per annullare tutte le modifiche della metadata dopo l'esecuzione di GroovyShell? Ho provato
shell1.getClassLoader().clearCache();
e
shell1.resetLoadedClasses();
ma che non ha fatto un cambiamento.
Posso farlo con alcuni problemi di caricamento del classloader? – cretzel