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

fst*_*any 4 kotlin

我在 Kotlin 中有以下课程:

class Example {
    val name: String

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

    init {
        name = "StackOverflow"
    }
}
Run Code Online (Sandbox Code Playgroud)

当我name在惰性初始化块中使用时出现以下错误lazyVar(即使nameinit块中初始化):

变量 'name' 必须被初始化

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

class Example {
    val name: String

    val lazyVar: String by lazy {
        initLazyVar()
    }

    init {
        name = "StackOverflow"
    }

    private fun initLazyVar(): String {
        return name + " something else"
    }
}
Run Code Online (Sandbox Code Playgroud)

这种技术有效,但有没有办法保持内联惰性块的兼容性而不是依赖外部函数?

Alf*_*Moh 6

尝试

class Example {
    val name: String

    init {
        name = "StackOverflow"
    }

    val lazyVar: String by lazy {
        name + " something else"
    }
}
Run Code Online (Sandbox Code Playgroud)