Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make a data class singleton in Kotlin?

Assume I have a data class:

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

I create this SensorData object from either an REST service or by internal setter method, whereas name is always populated and temp might be empty.

Further on, I need this SensorData object through several classes, thats I thought of using a singleton.

Obviously I need object keyword as described here, but how can I combine data class object ?

like image 672
Noam Silverstein Avatar asked Mar 03 '23 23:03

Noam Silverstein


1 Answers

You can use companion object to keep a reference to your data object:

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 }
        }
    }
}

And use it like this:

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

// Or with default values:
val name2 = SensorData.getInstance().name
like image 166
Sergey Avatar answered Mar 15 '23 10:03

Sergey