【发布时间】:2017-10-14 07:36:37
【问题描述】:
一个名为InterceptorTest 的类实现GroovyInterceptable,它可能是一个拦截器,它的invokeMethod 被覆盖如下:
class InterceptorTest implements GroovyInterceptable{
def invokeMethod(String name,args){
println "intercepting call! " //println a short message
}
}
我认为InterceptorTest 类作为拦截器会将所有方法调用委托给invokeMethod,所以以下应该可以工作:
def interceptor=new InterceptorTest()
println interceptor.work()
不幸的是,我得到了一个 StackOverflowError,似乎在 invokeMethod 的正文中,但我不知道为什么会这样。
作为对应,我修改了函数体,不是println,而是return消息:
class InterceptorTest implements GroovyInterceptable{
def invokeMethod(String name,args){
"intercepting call! " //return a short message
}
}
然后它工作正常:
def interceptor=new InterceptorTest()
println interceptor.work() //get "intercepting call!"
但是为什么?
【问题讨论】: