我有这个脚本:
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
}
Run Code Online (Sandbox Code Playgroud)
为什么它给了我:
Person(lastName:[lastName:foo, firstName:bar], firstName:null)
Run Code Online (Sandbox Code Playgroud)
为什么firstName保持为null并且lastName具有参数的映射?
我正在使用groovy 1.8.6
因为您将字段声明为def,所以TupleConstructor有效地添加了2个构造函数:
Person( Object first name )
Run Code Online (Sandbox Code Playgroud)
和
Person( Object firstName, Object secondName )
Run Code Online (Sandbox Code Playgroud)
然后,当您调用地图样式构造函数时,它调用一个arg元组构造函数,并将map作为参数.
向字段添加类型应该可以解决此问题
正如它在TupleConstructor的文档中所说:
限制: - 如果第一个属性(或字段)具有LinkedHashMap类型或者存在单个Map,AbsotractMap或HashMap属性(或字段),则Groovy的常规映射样式命名约定将不可用
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |