Grails 在对象引用上设置元类属性

Posted

技术标签:

【中文标题】Grails 在对象引用上设置元类属性【英文标题】:Grails setting metaclass properties on object reference 【发布时间】:2017-02-02 09:18:24 【问题描述】:

使用 Grails 域对象,我在尝试设置某些属性时偶然发现了一个问题。

var stepchild=parent.children.find it.id==xInt ;
stepchild.metaClass.birthMom=biologicalMothersName;

parent.children.eachchild->
    //when it gets to stepchild no metaclass property birthMom exists....

也没有在引用的对象上设置自定义错误

var stepchild=parent.children.find it.id==xInt ;
stepchild.errors.rejectValue('parent',"Not biological parent");

parent.children.eachchild->
    //when it gets to stepchild no errors....

我猜 find 不会返回对父子对象的真实引用?

【问题讨论】:

【参考方案1】:

对于您尝试在 stepChild 对象上设置属性/属性的方式,您应该使用 MetaClass.setAttribute() 方法:

stepchild.metaClass.setAttribute(stepChild,'birthMom', biologicalMothersName)

【讨论】:

不完全确定,您没有提供太多关于域对象外观的代码。 parent 是 stepChild 域对象的实际属性吗?

以上是关于Grails 在对象引用上设置元类属性的主要内容,如果未能解决你的问题,请参考以下文章

9.python 共享引用与单例

具有强引用的对象属性变为 null

面向对象:元类

在“ViewController”类型的对象上找不到属性引用?

对象引用未设置为对象实例的自动映射器问题

python类:描述器Descriptors和元类MetaClasses