Map使用の際にはgetterメソッドの動きに注意

Groovy

GIA読書会in関西で知った事その二。

Mapを使用する際には、getterメソッドの動作に注意。

groovyでは、オブジェクトaのgetXxx()メソッドを呼び出す際に

  • a.getXxx()
  • a.xxx

のいずれの方法でも値を取得できます。

が、オブジェクトaがMapの際には注意が必要。a.xxxの方法では常にnullがかえってくるんだって。しらなかった。

具体的には以下のソースを参考に。

def x = "abc"
assert x.class == String
assert x.getClass() == String

def y =  [a:100, b:200]
assert y.class == null
assert y.getClass() == java.util.LinkedHashMap

x.getMetaClass().getA = { 400 }
assert x.a == 400

y.getMetaClass().define{
    getA{ 200 }
}
assert y.a == 100

y.getMetaClass().define{
    getC{ 400 }
}
assert y.c == null

Groovy