kno*_*orv 8 grails groovy metaprogramming
我遇到了一个我无法解决的Groovy元编程问题.
将静态方法foo()添加到类FooBar时,FooBar.foo()按预期工作:
FooBar.metaClass.static.foo = {
println "hello"
}
FooBar.foo()
Run Code Online (Sandbox Code Playgroud)
但是,我将相同的静态方法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: []
Run Code Online (Sandbox Code Playgroud)
这是为什么?不应该Object.metaClass.static.foo = { .. }将foo()添加到FooBar中吗?
小智 11
为了获得您正在寻找的行为,您需要调用ExpandoMetaClass.enableGlobally()
请记住,这比正常的元编程具有更大的内存占用.
http://groovy.codehaus.org/api/groovy/lang/ExpandoMetaClass.html#enableGlobally()
| 归档时间: |
|
| 查看次数: |
4854 次 |
| 最近记录: |