Pio*_*ski 5 groovy metaprogramming
我想通过以下方式"破坏"Groovy中的方法:
Integer.metaClass.plus {Integer n -> delegate + n + 1}
assert 2+2 == 5
Run Code Online (Sandbox Code Playgroud)
我得到StackOverflowException(这并不奇怪).
有没有办法在元类'闭包中使用"原始"加法?
groovy惯用的方法是保存对旧方法的引用并在新方法中调用它.
def oldPlus = Integer.metaClass.getMetaMethod("plus", [Integer] as Class[])
Integer.metaClass.plus = { Integer n ->
return oldPlus.invoke(oldPlus.invoke(delegate, n), 1)
}
assert 5 == 2 + 2
Run Code Online (Sandbox Code Playgroud)
这实际上并没有详细记录,我计划在今晚或明天发布关于这个确切主题的博客文章:).