如何拦截Groovy中的调用?

时间:2014-05-15 10:03:27

标签: groovy

我有这个类结构:

interface bug
{
    def method()    
}

public class A implements bug{
    def method()
    {
        println "Works"
    }
}

A varaiable = new A()

bug.metaClass.invokeMethod {
    name,args ->
        println "Came here"
}

varaiable.method()

当我这样做时,我得到Works。为什么不Came here

我在做错的地方?

编辑:

即使我这样做:

A.metaClass.invokeMethod {
    name,args ->
        println "Came here"
}

我只获得Works

1 个答案:

答案 0 :(得分:1)

您正在使用

更改A的metaClass
A.metaClass.invokeMethod { name,args ->
    println "Came here"
}

构建variable之后。如果你把这个块放在行

之前
A varaiable = new A()

它应该像你期望的那样工作。

为了解决这个问题,你可以使用:

ExpandoMetaClass.enableGlobally()

实例将在每次调用时使用metaClass进行检查,但是正如预期的那样,这会降低速度