我试图了解invokeMethod如何在Groovy中拦截方法调用。不过,我似乎无法得到最基本的例子。
class Person implements GroovyInterceptable {
def invokeMethod(String name,args) {
println "called invokeMethod $name $args"
}
def greet() {
println "Hello from greet()"
}
}
def p = new Person()
p.greet()如果我试着运行这个例子,我会得到以下错误。我遗漏了什么?
Caught: java.lang.StackOverflowError
java.lang.StackOverflowError
at Person.invokeMethod(Person.groovy:4)
at Person.invokeMethod(Person.groovy:4)
at Person.invokeMethod(Person.groovy:4)
...发布于 2013-10-25 13:29:19
截取之后,您需要从invokeMethod调用实际的方法。
class Person implements GroovyInterceptable {
def invokeMethod(String name,args) {
System.out.println "called invokeMethod $name $args"
metaClass.getMetaMethod(name, args).invoke(this, args)
}
def greet() {
System.out.println "Hello from greet()"
}
}
def p = new Person()
p.greet()没错,你对println的看法是正确的。必须使用SOP。
https://stackoverflow.com/questions/19580008
复制相似问题