3

invokeMethod在 Groovy 中,和方法之间的主要区别是什么methodMissing,是否有明确的指导方针,什么时候应该使用一个而不是另一个?

4

3 回答 3

3

什么时候使用什么:总是使用methodMissing。

@FooBarUser。感谢您将我指向包含错误文档的页面,该页面将很快更改。

invokeMethod 通常不会为每个方法调用调用,仅在某些情况下。这也是为什么要添加 methodMissing 的原因,以便有一个角色明确的方法,不像有时回退,有时是前端方法 invokeMethod

于 2013-10-09T14:26:58.540 回答
1

这里有帖子

在 Groovy 对未在类中定义的方法的调用引发 MissingMethodException 之前,Groovy 首先通过对象的 methodMissing() 方法路由调用。这让程序员有机会拦截对这些不存在的方法的调用并为它们定义一个实现。

和这里的文档:

从 1.5 开始,Groovy 支持“methodMissing”的概念。这与 invokeMethod 的不同之处在于它仅在方法分派失败的情况下被调用。

1) 由于 method/propertyMissing 仅在调度失败的情况下发生,因此它们执行起来很昂贵

2)由于方法/propertyMissing不会像invokeMethod那样拦截每个方法调用,它们可以通过一些元编程技巧来提高效率

于 2013-10-07T09:34:49.517 回答
0

在进行自定义委托时,invokeMethod() 似乎在装饰器模式 Groovy 文档中使用了很多。例如:

class TracingDecorator {
    private delegate
    TracingDecorator(delegate) {
        this.delegate = delegate
    }
    def invokeMethod(String name, args) {
        println "Calling $name$args"
        def before = System.currentTimeMillis()
        def result = delegate.invokeMethod(name, args)
        println "Got $result in ${System.currentTimeMillis()-before} ms"
        result
    }
}

话虽如此,def result = delegate.invokeMethod(name, args)可以很容易地用更现代的 Groovy 成语替换def result = delegate."$name"(*args)

于 2017-04-01T00:32:05.430 回答