我想实现功能性,允许在不使用动态属性的map
的情况下将未知属性添加到类中。在propertyMissing方法中添加属性时的奇怪行为
由于Groovy允许使用metaClass
我在propertyMissing
方法中使用它。
class Item {
def propertyMissing(String name, value) {
this.class.metaClass."$name" = value
}
}
但我遇到了一个奇怪的行为。
def i1 = new Item()
i1.prop = "value"
println i1.properties // [class:class Item]
println i1.prop // null
i1.metaClass.field = "555"
println i1.properties // [prop:null, class:class Item, field:555]
println i1.prop // null
i1.prop = "value1"
println i1.properties // [prop:value1, class:class Item, field:555]
println i1.prop // value1
另外,如果我尝试设置在例如prop
它不会增加它了
def i1 = new Item()
i1.metaClass.unkn = "1111"
i1.prop = "value"
println i1.properties // [class:class Item, unkn:1111]
println i1.prop // null
i1.metaClass.field = "555"
println i1.properties // [class:class Item, unkn:1111, field:555]
println i1.prop // null
i1.prop = "value1"
println i1.properties // [class:class Item, unkn:1111, field:555]
println i1.prop // null
为什么它有如此行为之前访问metaClass
?
哦,我明白了。我完全忽略了那个异常有MetaClassImpl。我刚刚看到MissingPropertyException,并没有看得更远...... – lapots