лучший метод в котлине - PullRequest
       2

лучший метод в котлине

0 голосов
/ 22 октября 2018

Может ли кто-нибудь помочь мне найти лучший способ создания отдельного экземпляра в 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
   }
}

Редактировать: Я не хочу инициализировать каждый объект в начале - долженбыть сделано только при необходимости.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Ваш класс не выглядит как синглтон.Может быть, вы хотите что-то вроде этого

class Bar(private val blub) {

    var foo by lazy{ FooService(blub) }
}

ИЛИ вы можете поместить это в объект-компаньон, чтобы иметь одинаковый экземпляр между всеми объектами

0 голосов
/ 22 октября 2018

Если ваш FooService не принимает какие-либо параметры через геттер для его инициализации, вы можете использовать object для этого:

object FooHolder {
    val foo: FooService = FooService(...)
}

В противном случае ваш шаблонКажется, просто отлично, альтернатива будет использовать переменную Nullable вместо lateinit, но они по сути одинаковы:

private var foo: FooService? = null

override fun getService(): FooService {
    if (foo == null) {
        foo = FooService(...)
    }
    return foo!!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...