Na przykład, jeśli wykonać Groovy skrypt, który modyfikuje ciąg meta klasę, dodając foo() metodaJak cofnąć zmiany w klasie meta po uruchomieniu GroovyShell?
GroovyShell shell1 = new GroovyShell();
shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}");
gdy tworzę nową powłokę potem i wykonać go, zmiany są nadal tam
GroovyShell shell2 = new GroovyShell();
Object result = shell2.evaluate("'a'.foo()");
Czy istnieje sposób na cofnięcie wszystkich zmian w klasie meta po uruchomieniu GroovyShell? Próbowałem
shell1.getClassLoader().clearCache();
i
shell1.resetLoadedClasses();
ale nie wprowadzić zmiany.
Czy mogę to zrobić z niektórymi zakłóceniami klasy? – cretzel