gpt4 book ai didi

Groovy:使用 GroovyInterceptable 的 println 与 System.out.println

转载 作者:行者123 更新时间:2023-12-04 19:03:42 29 4
gpt4 key购买 nike

为什么我需要使用 System.out.println而不是 println当我使用 GroovyInterceptable ?

例如,如果我在 Groovy 文件中编码,我可以通过键入以下内容打印到控制台:

println "Printing to Console"

但如果我想在这里打印:
class Test implements GroovyInterceptable {
def sum(Integer x, Integer y) { x + y }

def invokeMethod(String name, args) {
System.out.println "Invoke method $name with args: $args"
}
}

def test = new Test()
test?.sum(2,3)

我必须使用 System.out.println在那个方法中,否则我会得到 StackOverflowError .为什么?

更新:
感谢@Dan Getz 的回答,我知道为什么 GroovyInterceptable 会发生这种情况现在上课。有谁知道 Groovy 中是否存在其他可能出现此问题的类实现?

最佳答案

这是因为你的类(class) Test实现 GroovyInterceptable 接口(interface),根据文档,是

used to notify that all methods should be intercepted through the invokeMethod mechanism of GroovyObject.



这不仅仅是在您的类上定义的方法。尝试:
test?.total(2,3)

你会看到它返回

Invoke method total with args: [2, 3]



调用 println里面 invokeMethod因此被理解为对 this.println 的调用。 ,就像调用 sum将会。但是 this.println只需调用 invokeMethod再次,因为你实现了 GroovyInterceptable , 等等。

如果您不实现 GroovyInterceptable,则不会发生这种情况.例如,运行以下代码
class Test {
def sum(Integer x, Integer y) {
println "Let's sum!"
x + y
}
}

def test = new Test()
test?.sum(2,3)

将输出

Let's sum!

关于Groovy:使用 GroovyInterceptable 的 println 与 System.out.println,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646899/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com