我对groovy很新,看一些现有的代码,我看到了:
def timestamp = event.timestamp[]
我不明白空方括号在这一行上做了什么。请注意,此处定义的时间戳应该会收到一个长值。
在这段代码中,event
在我们巨大的代码库中的其他地方定义,所以我不确定它是什么。我认为这是一张地图,但是当我在地图上使用这种表示法编写一些单独的测试代码时,方括号会导致将空值分配给时间戳。但是,在上面的代码中,括号是获得正确(非空)值所必需的。
一些快速谷歌搜索没有多大帮助(难以搜索“[]”)。
编辑:结果事件和event.timestamp都是zero.core.groovysupport.GCAccessor对象,并且如下面的答案所示,[]必须在这些对象上调用getAt()并返回一个值(在这种情况下) ,很长)。
答案 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( [] )