例如,如果我执行Groovy脚本,其修改字符串的元类,添加一个方法foo()如何在执行GroovyShell后撤消元类更改?
GroovyShell shell1 = new GroovyShell();
shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}");
当我创建之后,一个新的外壳,并执行它,这些变化仍然存在
GroovyShell shell2 = new GroovyShell();
Object result = shell2.evaluate("'a'.foo()");
有没有办法在执行GroovyShell后取消所有元类更改?我试图
shell1.getClassLoader().clearCache();
和
shell1.resetLoadedClasses();
但这并没有做出改变。
我可以用一些类加载器搞定吗? – cretzel 2009-11-13 08:14:24