我一直碰到这样的情况:

    var allData: List<ResponseData>

    FileInputStream(dataPath).use { input ->
        // allData is initialized here
        allData = ResponseData.parse(input)
    }

    // Kotlin can't tell that allData was initialized
    useAllData(allData)

我认为问题在于,Kotlin不知道何时将传递给use的lambda进行调用,因此它不知道在到达useAllData时变量是否已初始化。我怀疑这只是一个没有好的解决方法的限制,但我希望有人可以用一种优雅的方式来初始化这些类型的块中的内容(例如usewith等)。

最佳答案

Kotlin的 use 返回结果,您可以将结果直接分配给变量以避免这种类型的问题。例如。:

var allData: List<ResponseData> = FileInputStream(dataPath).use { input ->
    // allData is initialized here
    ResponseData.parse(input)
}

// Kotlin can now tell that allData was initialized
useAllData(allData)

关于kotlin - 如何在Lambda中初始化var,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41966530/

10-10 10:36