Grails 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() 当我有另一个属性名称相同但类型不同的

基于此,我创建了一个具有动态属性的Groovy类

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的事。谢谢