我有这个脚本:
def person = new Person(lastName: "foo", firstName: "bar")
println person
@groovy.transform.TupleConstructor
@groovy.transform.ToString(includeNames = true, includeFields=true)
class Person
{
def lastName
def firstName
}
为什么它给了我:
Person(lastName:[lastName:foo, firstName:bar], firstName:null)
为什么firstName保持为null而lastName具有参数的映射?
我正在使用groovy 1.8.6
答案 0 :(得分:5)
由于您的字段已声明为def
,因此TupleConstructor
实际上会添加2个构造函数:
Person( Object first name )
和
Person( Object firstName, Object secondName )
然后,当你调用map风格的构造函数时,它调用一个arg tuple构造函数,并将map作为参数。
在字段中添加类型应该可以解决此问题
正如docs for TupleConstructor中所述:
限制: - 如果第一个属性(或字段)具有LinkedHashMap类型或者存在单个Map,AbsotractMap或HashMap属性(或字段),则Groovy的常规地图样式命名约定将不可用