我是Kotlin的新手。仍在学习基本语法。 我听说过与Java中的static类似的伴随对象。但是不知道如何在Kotlin中创建同步单例。
答案 0 :(得分:6)
只需使用
object Singleton {
// any members you need
}
它已经正确同步:
请注意,这不能保证对其进行线程安全的调用,但这与Java中的情况一样。
答案 1 :(得分:1)
还有其他方法,但是这两种方法是生成单例类的最简单方法
方法1-Kotlin方式
object SingletonObj {
init {
// do your initialization stuff
}
}
方法2:在Kotlin中使用双Null检查方式
class SingletonObj {
private constructor(context: Context)
companion object {
@Volatile private var mInstance: SingletonObj? = null
public fun get(context: Context): SingletonObj =
mInstance ?: synchronized(this) {
val newInstance = mInstance ?: SingletonObj(context).also { mInstance = it }
newInstance
}
}
}
答案 2 :(得分:0)
我认为,更多的研究发现了。这是怎么做的。如果可以采取更好的方法,请纠正我。
companion object {
@Volatile private var INSTANCE: Singleton ? = null
fun getInstance(): Singleton {
if(INSTANCE == null){
synchronized(this) {
INSTANCE = Singleton()
}
}
return INSTANCE!!
}
}
答案 3 :(得分:0)
线程安全且懒惰:
class Singleton private constructor() {
companion object {
val instance: Singleton by lazy { Singleton() }
}
}
已在 by lazy
中实现了双空检查。