2016-03-26 22 views
7

Trong Kotlin, tôi có thể thực hiện khởi tạo lười biếng mà không có tham số như khai báo bên dưới.Cách khởi tạo Lazy với tham số trong Kotlin

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

Tuy nhiên, nếu tôi có một tham số trong initializerPresenter tôi ví dụ viewInterface, làm thế nào có thể tôi vượt qua các tham số vào Lazy Initiallization?

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

Trả lời

13

Bạn có thể sử dụng bất kỳ phần tử nào trong phạm vi có thể truy cập, đó là tham số hàm, thuộc tính và hàm. Bạn thậm chí có thể sử dụng các thuộc tính lười biếng khác, đôi khi có thể khá hữu ích. Dưới đây là tất cả ba biến thể trong một đoạn mã duy nhất.

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

Và mọi chức năng và đặc tính cấp cao nhất cũng có thể được sử dụng.

+0

Cảm ơn bạn rất nhiều! – Elye

+0

Tôi thích cách bạn phù hợp với cả ba khả năng thành một ví dụ về mã. –

Các vấn đề liên quan