android - 如何在 Kotlin 中将 setter 设为私有(private),用于非最终变量?

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

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

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

Animal 是一个抽象类,具有眼睛和腿等字段。

我不希望调用者能够直接设置玩具。但我希望能够用玩具做一些工作,比如
fun addQuota(){toys+=4}

我如何干净地完成这个?我仍然想要一个公共(public) getter,一个私有(private) setter,但我不希望变量是最终的。而且,这个数据类是 Room 的实体。

最佳答案

您可以通过使用构造函数的属性作为 toys 的支持字段来做到这一点。属性(property):

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

关于android - 如何在 Kotlin 中将 setter 设为私有(private),用于非最终变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53489171/

相关文章:

java - 无法在 Android 上的 Xamarin 中使用 PayPal SDK 找到明确的 Activity 类付款 Activity

android - 嵌套的 RecyclerView 不滚动

java - 如何检查房间数据库是否为空

android - 房间的可空外键

java.lang.RuntimeException : Failed to init Cipher using FingerPrint 错误

android - android 如何设置TableRow之间的边距

java - android 图像裁剪器无法正常工作

android - 改造协程 livedata 仅第一次调用

android - 如何在 Compose 中将 Icon 与 Text 组件的第一行集中对齐?

android - 查询 Room 中对象的类型转换列表