有人可以帮我找到在Kotlin中创建单个实例的更好方法吗?
class Bar(private val blub) {
private lateinit var foo: FooService
private lateinit var doo: DooService
override fun getFooService(): FooService {
if (!::foo.isInitialized) {
foo = FooService(blub)
}
return foo
}
override fun getDooService(): DooService {
if (!::doo.isInitialized) {
doo = DooService(blub)
}
return doo
}
}
编辑:
我不想在一开始就初始化每个对象-应该仅在需要时执行。
提前致谢!
最佳答案
如果您的FooService
没有通过getter进行初始化的任何参数,则可以为此使用 object
:
object FooHolder {
val foo: FooService = FooService(...)
}
否则,您的模式似乎很好,替代方法是使用可为空的变量而不是
lateinit
,但是它们本质上是相同的:private var foo: FooService? = null
override fun getService(): FooService {
if (foo == null) {
foo = FooService(...)
}
return foo!!
}
关于android - “singleton”模式方法在Kotlin中的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52934272/