加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 16:36:07 所属栏目:大数据 来源:网络整理
导读:例如,如果我执行修改String元类的Groovy脚本,则添加方法foo() GroovyShell shell1 = new GroovyShell();shell1.evaluate("String.metaClass.foo = {- delegate.toUpperCase()}"); 当我在此之后创建一个新的shell并执行它时,更改仍然存在 GroovyShell shell2
例如,如果我执行修改String元类的Groovy脚本,则添加方法foo()

GroovyShell shell1 = new GroovyShell();
shell1.evaluate("String.metaClass.foo = {-> delegate.toUpperCase()}");

当我在此之后创建一个新的shell并执行它时,更改仍然存在

GroovyShell shell2 = new GroovyShell();
Object result = shell2.evaluate("'a'.foo()");

有没有办法在执行GroovyShell后撤消所有元类更改?我试过了

shell1.getClassLoader().clearCache();

shell1.resetLoadedClasses();

但这没有改变.

解决方法

您可以使用

GroovySystem.metaClassRegistry.removeMetaClass(String.class);

还原对String元类所做的所有更改.

或者,您只能更改某个String实例的元类,因此不会影响所有String实例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读