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

grails – Groovy元编程 – 向Object.metaClass添加静态方法

发布时间:2020-12-14 16:33:27 所属栏目:大数据 来源:网络整理
导读:我遇到了一个我无法解决的Groovy元编程问题. 将静态方法foo()添加到类FooBar时,FooBar.foo()按预期工作: FooBar.metaClass.static.foo = { println "hello"}FooBar.foo() 但是,我将相同的静态方法foo()添加到类Object,然后FooBar.foo()失败并出现MissingMet
我遇到了一个我无法解决的Groovy元编程问题.

将静态方法foo()添加到类FooBar时,FooBar.foo()按预期工作:

FooBar.metaClass.static.foo = {
    println "hello"
}
FooBar.foo()

但是,我将相同的静态方法foo()添加到类Object,然后FooBar.foo()失败并出现MissingMethodException:

Object.metaClass.static.foo = {
    println "hello"
}
FooBar.foo()
// groovy.lang.MissingMethodException:
// No signature of method: FooBar.foo() is applicable for argument types: 
// () values: []

这是为什么?不应该将Object.metaClass.static.foo = {..}添加到FooBar?

解决方法

为了获得您正在寻找的行为,您需要调用ExpandoMetaClass.enableGlobally()

请记住,这比正常的元编程具有更大的内存占用.

http://groovy.codehaus.org/api/groovy/lang/ExpandoMetaClass.html#enableGlobally()

(编辑:李大同)

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

    推荐文章
      热点阅读