在Groovy中,变量名后面的空方括号是什么意思?

时间:2012-09-11 16:45:12

标签: groovy

我对groovy很新,看一些现有的代码,我看到了:

def timestamp = event.timestamp[]

我不明白空方括号在这一行上做了什么。请注意,此处定义的时间戳应该会收到一个长值。

在这段代码中,event在我们巨大的代码库中的其他地方定义,所以我不确定它是什么。我认为这是一张地图,但是当我在地图上使用这种表示法编写一些单独的测试代码时,方括号会导致将空值分配给时间戳。但是,在上面的代码中,括号是获得正确(非空)值所必需的。

一些快速谷歌搜索没有多大帮助(难以搜索“[]”)。

编辑:结果事件和event.timestamp都是zero.core.groovysupport.GCAccessor对象,并且如下面的答案所示,[]必须在这些对象上调用getAt()并返回一个值(在这种情况下) ,很长)。

3 个答案:

答案 0 :(得分:2)

方括号将调用该对象的基础getAt(Object)方法,因此该行可能正在调用该方法。

我制作了一个小剧本:

class A { 
    def getAt(p) { 
        println "getAt: $p"
        p 
    }
}
def a = new A()
b = a[]
println b.getClass()

它返回作为参数传递的值。在这种情况下,ArrayList。也许那个时间戳对象有一些元编程。运行代码后def timestamp包含什么内容?

同时检查你的groovy版本。

答案 1 :(得分:0)

清空列表,找到this。有点相关/可能有帮助question here

答案 2 :(得分:0)

不是在计算机上,但看起来它正在调用方法event.timestamp并将空列表作为参数传递。

与:

相同
def timestamp = event.timestamp( [] )