How to Lazy Initialize with a parameter in Kotlin

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.

Leave a Comment