2016-03-26 11 views
7

In Kotlin, è possibile eseguire Inizializzazione pigro senza parametro come indicato di seguito.Come inizializzare pigro con un parametro in Kotlin

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

Tuttavia, se ho un parametro nella mia initializerPresenter cioè viewInterface, come avrei potuto passare il parametro nella pigro Initiallization?

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

risposta

13

È possibile utilizzare qualsiasi elemento all'interno dell'ambito accessibile, ovvero i parametri del costruttore, le proprietà e le funzioni. Puoi anche usare altre proprietà pigre, che a volte possono essere molto utili. Ecco tutte e tre le varianti in un singolo pezzo di codice.

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 */ 
    } 
} 

E qualsiasi funzione e proprietà di livello superiore possono essere utilizzate pure.

+0

Grazie mille! – Elye

+0

Mi piace come si inseriscono tutte e tre le possibilità in un esempio di codice. –

Problemi correlati