有人可以帮助我找到在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
}
}
编辑: 我不想一开始就初始化每个对象-应该仅在需要时才进行。
谢谢!
答案 0 :(得分:2)
您的课程看起来不像单身。也许你想要这样的东西
class Bar(private val blub) {
var foo by lazy{ FooService(blub) }
}
或者您可以将其放在伴随对象中,以使所有对象之间具有相同的实例
答案 1 :(得分:1)
如果您的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!!
}