说我有一个数据类:
data class Money(private var _amount: Int, private val currency: String) {
private var amount: Int = _amount
get() {
return if (field < 0) 0 else field
}
override fun toString(): String {
return "Money(amount=$amount, currency='$currency')"
}
}
我想知道我应该作为参数传递什么:var或val?我应该添加私人修改吗?在哪种情况下是最佳做法? 因为当我添加一个getter时我必须将它更改为var,但据我所知,在Kotlin中写val更好吗?
答案 0 :(得分:2)
我想写下你给出的代码:
data class Money(private var _amount: Int, private val currency: String) {
private var amount: Int
get() = _amount.coerceAtLeast(0)
set (value) { _amount = value }
override fun toString() = "Money(amount=$amount, currency='$currency')"
}
_amount
可以只是一个参数,它不应该是一个字段,它将在构造之后消失,并且它只能在init
块,构造函数和字段变量初始化器中访问(想象一下) Java中的构造函数参数。coerceAtLeast
是stdlib 不太重要的是,可以推断出amount
的类型,但是我想明确地在这里声明它,因为它对新来者来说更友好。