2010年3月17日

Groovy 中 Map 的鍵值型別

當了解到 Groovy 的 String 與 GString 物件的同時, 同時也要學到 Collection 物件的應用。

通常會用到 Map 物件來做資料存查(cache); 當資料存入 map 時, 會將 key 自動轉成物件, 而且一般會使用 字串 物件做為資料的識別(key)。理想上來說:
def key1 = 'aKey'
def key2 = "$key1"
def map1 = [:]
def map1[key1] = "some thing"

// key1 與 key2 等義(雖然型別不同)
assert map1."$key2" == map1[key1]

map1.remove("aKey")
assert map1.size() == 0

不過, 同時使用 groovy 語法又使用 Java Map 的 API 進行資料的操作 (在一處 code block 設值, 另一處 code block 取值或移除), 往往會稍不留意 key 的型別或自動轉換後的型別, 結果是存得進去卻取不出來; 也就是說:
// object_of_String 與 object_of_GString 值相同下
assert someMap[object_of_String] != someMap[object_of_GString]

此時, key 要保持型別的一致才能順利存取。目前的實際程式測試結果是如此, 得再進一步驗證。

沒有留言: