例如,如果我执行修改String元类的Groovy脚本,则添加方法foo()
GroovyShell shell1 = new GroovyShell();
shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}");
Run Code Online (Sandbox Code Playgroud)
当我在那之后创建一个新的shell并执行它时,更改仍然存在
GroovyShell shell2 = new GroovyShell();
Object result = shell2.evaluate("'a'.foo()");
Run Code Online (Sandbox Code Playgroud)
有没有办法在执行GroovyShell后撤消所有元类更改?我试过了
shell1.getClassLoader().clearCache();
Run Code Online (Sandbox Code Playgroud)
和
shell1.resetLoadedClasses();
Run Code Online (Sandbox Code Playgroud)
但这没有改变.