我想将methodMissing()
添加到我没有源代码控制权的类中。我试过了:
class MyClass {} // class I'm not allowed to edit
class MyCategory {
static def methodMissing(MyClass self, String name, Object args) {
"I was hoping this was called on a.nonexisting()"
}
static def test(MyClass self) {
"test works"
}
}
def a = new MyClass()
use(MyCategory) {
println a.test()
println a.nonexisting()
}
但我仍然得到groovy.lang.MissingMethodException: No signature of method: MyClass.nonexisting() is applicable for argument types: () values: []
是否可以在课程中添加临时 methodMissing
?
我试图避免混淆元类,因为这种变化将是全局的,不可逆转的。
答案 0 :(得分:2)
根据Groovy in Action,2015年第2版发布:
类别方法名称可以采用属性访问器的形式 (假装属性访问),运算符方法和GroovyObject 方法。 MOP挂钩方法(propertyMissing,methodMissing)无法通过类别添加 类即可。这是Groovy 2.4的限制。该功能可能会在以后的版本中提供。
所以在2.4.12,
中无法做到这一点release notes for Groovy 2.5(2017 - 11年仍在开发中)没有提及任何相关变化。
release notes for Groovy 2.6并未提及。
最后遗憾的是release notes for Groovy 3.0对methodMissing