Kotlin lazy属性取决于在init中初始化的另一个属性

时间:2017-08-04 09:54:29

标签: kotlin

我在Kotlin有以下课程:

class Example {
    val name: String

    val lazyVar: String by lazy {
        name + " something else"
    }

    init {
        name = "StackOverflow"
    }
}

我在name的延迟初始化块中使用lazyVar时出现以下错误(即使在name块中初始化init):

  

必须初始化变量'name'

解决方案是在另一种方法中初始化变量:

class Example {
    val name: String

    val lazyVar: String by lazy {
        initLazyVar()
    }

    init {
        name = "StackOverflow"
    }

    private fun initLazyVar(): String {
        return name + " something else"
    }
}

这种方法有效,但是有没有办法保持内联惰性块的强度而不是依赖外部函数?

1 个答案:

答案 0 :(得分:4)

尝试

class Example {
    val name: String

    init {
        name = "StackOverflow"
    }

    val lazyVar: String by lazy {
        name + " something else"
    }
}