如何在Kotlin中将二传手私有化以处理非最终变量?

时间:2018-11-26 21:14:52

标签: android kotlin android-room android-architecture-components

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

data class Cat(var toys:Int=3, val type:String):Animal(){
    ...
}

动物是具有眼睛和腿等区域的抽象类。

我不希望来电者能够直接放置玩具。但我希望能够对

之类的玩具做一些工作
fun addQuota(){toys+=4}

我该如何干净地完成它?我仍然想要一个公共的获取器,一个私有的设置器,但是我不希望变量是最终的。而且,此数据类是Room的实体。

3 个答案:

答案 0 :(得分:2)

您可以通过使用构造函数的属性作为ax2.set_ylim(ax1.get_ylim()属性的后备字段来做到这一点:

toys

我希望这可以与房间配合使用。

来源https://discuss.kotlinlang.org/t/private-setter-for-var-in-primary-constructor/3640/10

答案 1 :(得分:0)

结果证明以下作品:

data class Cat(private var toys:Int=3, val type:String):Animal(){
    ...
    fun getToys()=toys
}

答案 2 :(得分:0)

我看到您已经找到了使您满意的解决方案,但也许您可以考虑以下解决方案:

class Cat(toys: Int = 3, val type: String) : Animal() {

    var toys = toys
        private set

    fun addQuota() {
        toys += 4
    }

}