我需要像这样创建一个数据类
data class Cat(var toys:Int=3, val type:String):Animal(){
...
}
动物是具有眼睛和腿等区域的抽象类。
我不希望来电者能够直接放置玩具。但是我希望能够对玩具做一些工作,例如
fun addQuota(){toys+=4}
我该如何干净地完成它?我仍然想要一个公共(public)的getter,一个私有(private)的setter,但是我不希望该变量是final。而且,此数据类是Room的实体。
最佳答案
您可以通过使用构造函数的属性作为toys
属性的后备字段来执行此操作:
data class Cat(val type: String, private var toysField: Int = 3 ):Animal(){
var toys = toysField
private set(value){
toysField = value
}
fun addQuota(){toys += 4}
}
abstract class Animal
我希望这可以配合房间使用。
来源https://discuss.kotlinlang.org/t/private-setter-for-var-in-primary-constructor/3640/10