是否可以通过Groovy中的类别添加methodMissing钩子?

时间:2017-12-06 18:13:31

标签: java groovy

我想将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

我试图避免混淆元类,因为这种变化将是全局的,不可逆转的。

1 个答案:

答案 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.0methodMissing

一无所知