假设我有一个数据类:
data class SensorData(val name: String, val temp : Double)
我通过REST服务或内部setter方法创建此SensorData
对象,而name
总是填充的,temp
可能为空。
此外,我需要通过多个类来使用这个SensorData对象,那就是我想到的使用singleton
。
很明显,我需要object
关键字as described here,但是如何结合data class object
呢?
答案 0 :(得分:1)
我认为您对Singleton的理解是错误的:
“单例模式是一种软件设计模式,它将类的实例化限制为一个“单个”实例”。
它不仅用于将其公开给所有类,还用于限制实例数。
数据类是用于存储数据的类,为什么它应该是单例呢?
重新考虑您的体系结构以使其在需要时可访问。
答案 1 :(得分:1)
您可以使用伴侣对象保留对数据对象的引用:
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
答案 2 :(得分:0)
不要将数据类用作单例。那不是他们设计的目的。更好的方法是围绕您的数据类创建一个包装对象,该包装对象处理您的SensorData-Object。如果您第二次轮询REST服务,这还将允许您使用多个SensorData对象(将来可能需要)或将当前对象替换为新对象。
pthread_join