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