我想通过以下方式在 Groovy 中“破坏”加法:
Integer.metaClass.plus {Integer n -> delegate + n + 1}
assert 2+2 == 5
我收到 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
这实际上并没有很好的记录,我打算在今晚或明天发表一篇关于这个确切主题的博客文章:)。
关于groovy - 如何在元类中使用该方法更改 groovy 中方法的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/920582/