基于这个问题,我创建了一个具有动态属性的 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
并将属性添加到动态对象的实例中。稍后我将使用这个对象来导出所有的属性和值。在不同的表中,我有相同的列名,但类型不同。
所以我的问题是:当我完成实例以不与其他实例冲突时,如何重置此元类?