Groovy extended hashmap con un campo
groovy map collect (2)
Esto no funciona ¿No debería?
class WeirdBean extends HashMap {
public String inner = "set within"
def getInner() { return this.inner }
def getOuter() { return this.outer }
}
def o = WeirdBean.newInstance()
o.outer = "set without"
println o.getOuter() // set without
println o.outer // set without
assert o.outer == o.getOuter() // Pass
println o.getInner() // set within
println o.inner // null, even though public
assert o.inner == o.getInner() // Fail, o.inner is null
Expression o.inner
devuelve la clave de HashMap. No existe tal clave inner
por lo que se devuelve null, mientras que se getInner()
valor del método getInner()
interior de this.inner
campo this.inner
(que está configurado en "set without"
. Por eso.
Parece que Map::get
tiene mayor prioridad que object.field
u object.field
. Como un acceso de campo dentro de una clase no pasa por el getter, esto funciona:
class WeirdBean extends HashMap {
public String inner = "set within"
def getInner() { return this.inner }
def getProperty(String property) {
(property == ''inner'') ? inner : super.get(property)
}
def getOuter() { return this.outer }
}
def o = WeirdBean.newInstance()
o.outer = "set without"
println o.getOuter() // set without
println o.outer // set without
assert o.outer == o.getOuter() // Pass
println o.getInner() // set within
println o.inner // null, even though public
assert o.inner == o.getInner() // Fail, o.inner is null