Grails Groovy动态对象-如何正确重置属性?
基于此,我创建了一个具有动态属性的Groovy类Grails Groovy动态对象-如何正确重置属性?,grails,dynamic,groovy,metaprogramming,metaclass,Grails,Dynamic,Groovy,Metaprogramming,Metaclass,基于此,我创建了一个具有动态属性的Groovy类 class MyDynamic { def propertyMissing( String name, value ) { this.metaClass."$name" = value value } } 到目前为止一切都很好,现在我可以成功地设置一些不存在的属性 MyDynamic dyna = new MyDynamic() dyna.someProp = new Date() 当我有另一个属性名称相同但类型不同的
class MyDynamic {
def propertyMissing( String name, value ) {
this.metaClass."$name" = value
value
}
}
到目前为止一切都很好,现在我可以成功地设置一些不存在的属性
MyDynamic dyna = new MyDynamic()
dyna.someProp = new Date()
当我有另一个属性名称相同但类型不同的实例时,问题就开始了
MyDynamic dyna2 = new MyDynamic()
dyna2.someProp = "0" //GroovyCastException: Cannot cast object '0' with class 'java.lang.String' to class 'java.util.Date'
实际上,我需要这样做,因为我正在使用查询结果创建对象,而不知道表和列。我使用ResultSetMetaData
获取列的名称,并将属性添加到动态对象的实例中。稍后我将使用此对象导出所有属性和值。在不同的表中,我有相同的列名,但类型不同
所以我的问题是:当我处理完这个实例后,如何重置这个元类以避免与其他实例冲突 为什么不是地图、地图或简单的容器:
class Dynamic {
def properties = [:]
void setProperty( String name, value ) {
properties[name] = value
}
def getProperty(String property) { properties[property] }
}
d = new Dynamic()
d.name = "yeah"
assert d.name.class == String
d.name = new Date()
assert d.name.class == Date
那个片段不起作用对不起,这个类是“class”写的,我修正了,但它仍然不起作用。你用的是什么版本?你能更具体地说“不起作用”吗?我正在使用Grails2.2.1Damn附带的2.0.7!我不知道Expando的事。谢谢