kotlin 单例 参数
时间: 2023-12-07 09:04:18 浏览: 168
在Kotlin中,创建带有参数的单例可以通过使用内部类和高阶函数的组合来实现。一种常见的方法是使用一个泛型类SingletonHolder,它接受一个带有参数的lambda表达式作为构造函数参数。以下是一个示例代码:
```kotlin
open class SingletonHolder<out T : Any, in A>(private val creator: (A) -> T) {
private var instance: T? = null
fun getInstance(arg: A): T = instance ?: synchronized(this) {
instance ?: creator(arg).apply { instance = this }
}
}
class MySingleton private constructor(private val arg: String) {
init {
// 初始化代码
}
companion object : SingletonHolder<MySingleton, String>(::MySingleton)
}
```
在上述示例中,SingletonHolder是一个泛型类,它接受一个创建实例的lambda表达式作为构造函数参数。MySingleton类通过将构造函数参数传递给SingletonHolder的getInstance方法来获取单例实例。
要创建一个带有参数的单例,你可以将带有参数的构造函数定义为私有,并在伴生对象中使用SingletonHolder来获取实例。在这个例子中,MySingleton类的构造函数接受一个字符串参数arg,并且在初始化代码块中进行了初始化操作。
要获取MySingleton的单例实例,你可以调用MySingleton.Companion.getInstance(arg)方法,其中arg是你想要传递的参数。
请注意,这只是一种实现带有参数的单例模式的方法,还有其他的方法可以实现类似的功能。
阅读全文