2012-09-11 128 views
1

我是相當新的時髦,看一些現有的代碼,我看到:Groovy中變量名後的空方括號是什麼意思?

def timestamp = event.timestamp[] 

我不明白什麼是空方括號在做這條線。請注意,這裏定義的時間戳應該會得到一個長整型值。

在這段代碼中,event被定義在我們龐大的代碼庫的其他地方,所以我不確定它是什麼。我認爲這是一張地圖,但是當我在地圖上使用這種記法編寫了一些單獨的測試代碼時,方括號會導致將一個空值分配給時間戳。然而,在上面的代碼中,括號是獲得正確(非空)值所必需的。

一些快速谷歌搜索沒有幫助很多(很難搜索「[]」)。

編輯:結果事件和event.timestamp都是zero.core.groovysupport.GCAccessor對象,並且如下面的答案所述,[]必須調用這些對象的getAt()並返回一個值(在此情況,很長)。

+0

'event.getClass()'returns ...?你可以運行代碼嗎? 'timestamp'對象是什麼類? – Will

+0

你所得到的'正確的價值'是什麼? – doelleri

回答

2

的方括號將調用該對象的基本getAt(Object)方法,使得線可能是調用的那一個。

我做了一個小的腳本:

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

它返回作爲參數傳遞的值。在這種情況下,一個ArrayList。也許那個時間戳對象有一些元編程。運行代碼後def timestamp包含什麼?

另請檢查您的常規版本。

0

不在計算機上,但它看起來像是調用方法event.timestamp並傳遞一個空列表作爲參數。

同爲:

def timestamp = event.timestamp([]) 
相關問題