如何使用字段的默认回退值创建@Immutable Groovy类?

时间:2016-08-01 19:09:45

标签: groovy

我们目前在@Immutable类中使用基于映射的构造函数,并在实例化期间传递所有字段值。如果用户在实例化期间没有为它们提供任何值,我想为字段设置合理的默认值?

有一种常规方式(一种简单的方法)吗?

1 个答案:

答案 0 :(得分:1)

您可以在类声明中填写属性:

@groovy.transform.Immutable
class Person {
    String name = 'john'
}

p = new Person(name: 'percy')
assert p.name == 'percy'

p2 = new Person()
assert p2.name == 'john'

更新:如果在创建对象后使用了任何setter,则Groovy会失败。

try {
    p2.name = 'echo'
    assert p2.name == 'echo'
    assert false
} catch(e) {
    assert true
}

更新2:啊,groovyConsole救援。 @Immutable正在构造函数中设置name字段,因此,该字段实际上是最终字段。

enter image description here