有人可以帮我找到在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/

10-11 15:07