Kotlin 如何在lambda中初始化var

Kotlin 如何在lambda中初始化var,kotlin,Kotlin,我经常遇到这样的情况: var allData: List<ResponseData> FileInputStream(dataPath).use { input -> // allData is initialized here allData = ResponseData.parse(input) } // Kotlin can't tell that allData was initialized

我经常遇到这样的情况:

    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)
var-allData:List
FileInputStream(数据路径)。使用{input->
//所有数据在此初始化
allData=ResponseData.parse(输入)
}
//Kotlin无法判断所有数据是否已初始化
使用所有数据(所有数据)
我认为问题在于,Kotlin不知道传递给
use
的lambda何时会被调用,因此它无法知道在到达
useAllData
时变量是否已初始化。我怀疑这只是一个没有很好解决方法的限制,但我希望有人有一种优雅的方式来初始化这类块中的东西(例如,
使用
使用
,等等)。

Kotlin返回的结果可以直接分配给变量,以避免此类问题。e、 g:

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)
var allData:List=FileInputStream(dataPath)。使用{input->
//所有数据在此初始化
ResponseData.parse(输入)
}
//Kotlin现在可以判断所有数据都已初始化
使用所有数据(所有数据)

Btw,我知道我可以做一些类似于
var allData:List?=在我的声明中为null,然后将
useAllData
调用更改为
useAllData(allData!!)
。这是可行的,但并不符合我对“优雅”的定义。