How to Lazy Initialize with a parameter in Kotlin

2019-04-21 23:25发布

问题:

In Kotlin, I could perform Lazy Initialization without Parameter as below declaration.

val presenter by lazy { initializePresenter() }
abstract fun initializePresenter(): T

However, if I have a parameter in my initializerPresenter i.e. viewInterface, how could I pass the parameter into the Lazy Initiallization?

val presenter by lazy { initializePresenter(/*Error here: what should I put here?*/) }
abstract fun initializePresenter(viewInterface: V): T

回答1:

You can use any element within the accessible scope, that is constructor parameters, properties, and functions. You can even use other lazy properties, which can be quite useful sometimes. Here are all three variant in a single piece of code.

abstract class Class<V>(viewInterface: V) {
  private val anotherViewInterface: V by lazy { createViewInterface() }

  val presenter1 by lazy { initializePresenter(viewInterface) }
  val presenter2 by lazy { initializePresenter(anotherViewInterface) }
  val presenter3 by lazy { initializePresenter(createViewInterface()) }

  abstract fun initializePresenter(viewInterface: V): T

  private fun createViewInterface(): V {
    return /* something */
  }
}

And any top-level functions and properties can be used as well.



标签: kotlin