我需要像这样创建一个数据类

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

08-26 01:32