大佬教程收集整理的这篇文章主要介绍了在groovy @Canonical bean构造函数调用中添加缺少的属性?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在与FactoryBuilderSupport一起使用的类中,我想动态添加在构造函数@L_618_2@期间尚未定义和提供的那些属性.这是精简版:@H_618_7@
@Canonical class MyClass { def startDate def additionalProperties = [:] def void propertymissing(String name,value) { additionalProperties[name] = value } }
但是,如果我构造具有未知属性的类,则不会添加proprty,但我会得到@L_315_11@missingPropertyException:@H_618_7@
def thing = new MyClass(startDate: datetiR_872_11845@e.Now(),duration: 1234)
属性持续时间不存在,我预计它将通过propertymissing处理.据我所知groovy,@L_618_2@tuple-constructor会导致无参数构造函数@L_618_2@,然后@L_618_2@groovy生成的setter.那么为什么我会得到@L_315_11@missingPropertyException呢?@H_618_7@
@Canonical class MyClass { def startDate def additionalProperties = [:] def void propertymissing(String name,value) { additionalProperties[name] = value } } // use reflection to see the constructors MyClass.class.getConstructors()
public MyClass() public MyClass(java.lang.object) public MyClass(java.util.LinkedHashMap) public MyClass(java.lang.object,java.lang.object)
在@Canonical documentation中,您可以看到以下限制:@H_618_7@
由于公共MyClass(java.util.LinkedHashMap)生成,您不能使用tuple-constructor,并且您得到MissingPropertyException.@H_618_7@
令人惊讶的是,如果您使用类型而不是使用def定义您的第一个对象(请注意我说第一个),@ Canon注释不会添加公共MyClass(java.util.LinkedHashMap),然后您的元组构造函数@L_618_2@工作,请参阅以下代码:@H_618_7@
@Canonical class MyClass { java.util.Date startDate def additionalProperties = [:] def void propertymissing(String name,value) { additionalProperties[name] = value } } // get the constructors MyClass.class.getConstructors() // Now your code works def thing = new MyClass(startDate: new java.util.Date(),duration: 1234)
public MyClass() public MyClass(java.util.DatE) public MyClass(java.util.Date,java.lang.object)
因此,由于没有公共MyClass(java.util.LinkedHashMap),因此限制不适用,并且您的元组构造函数@L_618_2@有效.@H_618_7@
另外我想说,既然这个解决方案有效,我无法争辩为什么……我一次又一次地阅读@Canonical文档,我没有看到描述这种行为的部分,所以我不知道为什么以这种方式工作,我也做了一些尝试,我有点困惑,只有当第一个元素是def时,公共MyClass(java.util.LinkedHashMap)被创建,即:@H_618_7@
@Canonical class MyClass { def a int c } // get the constructors MyClass.class.getConstructors()
public MyClass() public MyClass(java.lang.object) public MyClass(java.util.LinkedHashMap) // first def... public MyClass(java.lang.object,@R_197_10185@
现在,如果我改变顺序:@H_618_7@
@Canonical class MyClass { int c def a } // get the constructors MyClass.class.getConstructors()
现在首先不是def和公共MyClass(java.util.LinkedHashMap)没有生成:@H_618_7@
public MyClass() public MyClass(@R_197_10185@ public MyClass(int,java.lang.object)
希望这可以帮助,@H_618_7@
以上是大佬教程为你收集整理的在groovy @Canonical bean构造函数调用中添加缺少的属性?全部内容,希望文章能够帮你解决在groovy @Canonical bean构造函数调用中添加缺少的属性?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。