首页 > 解决方案 > 如何在 Kotlin 中制作数据类单例?

问题描述

假设我有一个数据类:

data class SensorData(val name: String, val temp : Double)

SensorData我从 REST 服务或通过内部 setter 方法创建此对象,而name始终填充并且temp可能为空。

此外,我需要通过几个类来使用这个 SensorData 对象,这就是我想到的使用singleton.

显然我需要这里描述的object关键字,但我该如何组合?data class object

标签: kotlinsingletondata-class

解决方案


您可以使用伴随对象来保留对数据对象的引用:

data class SensorData(val name: String, var temp : Double) {
    companion object {
        @Volatile
        @JvmStatic
        private var INSTANCE: SensorData? = null

        @JvmStatic
        @JvmOverloads
        fun getInstance(name: String = "default", temp : Double = 0.0): SensorData = INSTANCE ?: synchronized(this) {
            INSTANCE ?: SensorData(name, temp).also { INSTANCE = it }
        }
    }
}

并像这样使用它:

val name1 = SensorData.getInstance("name", 5.0).name

// Or with default values:
val name2 = SensorData.getInstance().name

推荐阅读