相关疑难解决方法(0)

如何在执行GroovyShell后撤消元类更改?

例如,如果我执行修改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)

但这没有改变.

groovy metaprogramming

10
推荐指数
1
解决办法
2837
查看次数

标签 统计

groovy ×1

metaprogramming ×1