0
我们目前在@Immutable类中使用基于地图的构造函数,并在实例化过程中传递所有的字段值。我想为字段设置合理的默认值,以防在实例化过程中用户没有为它们提供任何值。如何使用字段的默认回退值创建@Immutable Groovy类?
有没有一个常规的方法(一种简单的方法)来做到这一点?
我们目前在@Immutable类中使用基于地图的构造函数,并在实例化过程中传递所有的字段值。我想为字段设置合理的默认值,以防在实例化过程中用户没有为它们提供任何值。如何使用字段的默认回退值创建@Immutable Groovy类?
有没有一个常规的方法(一种简单的方法)来做到这一点?
您可以在类声明的属性填写:
@groovy.transform.Immutable
class Person {
String name = 'john'
}
p = new Person(name: 'percy')
assert p.name == 'percy'
p2 = new Person()
assert p2.name == 'john'
更新: Groovy的失败,如果任何setter方法是创建对象后使用。
try {
p2.name = 'echo'
assert p2.name == 'echo'
assert false
} catch(e) {
assert true
}
更新2:啊,groovyConsole
救援。 @Immutable
正在设置构造函数中的name
字段,因此,该字段实际上是最终的。
啊,由于某种原因,我的印象是,这些领域是'final'(我的坏)。谢谢。 – phani
这些字段*是*最终的。在这个例子中没有什么可以表明它们不是。 Doc:http://docs.groovy-lang.org/latest/html/gapi/groovy/transform/Immutable.html –
@MichaelEaster在上面的例子中,字段name被赋值两次:一次的声明和另一次在隐式基于地图的构造函数中。这是不允许“最终”变量(至少在Java中,我是Groovy的新手)。请纠正我,如果我失去了一些东西。 – phani