Kotlin - クラス - by lazy

公開日:2019-11-25 更新日:2019-11-29
[Kotlin]

1. 概要

by lazy を使うと、プロパティが参照された時に1度だけ初期化処理を行うことができます。
プリミティブ型でも使用可能です。
初期化処理はラムダ式で行い、戻り値がプロパティに設定されます。


2. by lazy

class Test {
    // var value: Int by lazy { init() } // var にするとエラー
    val value: Int by lazy { initValue() }

    private fun initValue():Int {
        println("initValue");
        return 100
    }
}

fun main() {
    val obj = Test()
    println("Test の生成")
    println(obj.value) // 100
    println(obj.value) // 100
}

実行結果
オブジェクト生成時には初期化処理が実行されていないことがわかります。
Test の生成
initValue
100
100