在尝试使用ExpandMetaClass时,我遇到了这种情况:
class A {}
A.metaClass.foo = { 0 }
A.metaClass.foo = { 1 }
println (new A().foo())
A.metaClass.foo = { 2 }
println (new A().foo())
Collection.metaClass.foo = { 0 }
Collection.metaClass.foo = { 1 }
println ([].foo())
Collection.metaClass.foo = { 2 }
println ([].foo())
打印
1
2
1
1
这似乎不一致。这种行为背后的理由是什么?
答案 0 :(得分:2)
听起来像个臭虫。您应填写JIRA。
它适用于每个实例:
class A {}
A.metaClass.foo = { 0 }
A.metaClass.foo = { 1 }
assert (new A().foo()) == 1
A.metaClass.foo = { 2 }
assert (new A().foo()) == 2
Collection.metaClass.foo = { 0 }
Collection.metaClass.foo = { 1 }
assert ([].foo()) == 1
def j = []
j.getMetaClass().foo = { 2 }
assert (j.foo()) == 2