我一直碰到这样的情况:
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
时变量是否已初始化。我怀疑这只是一个没有好的解决方法的限制,但我希望有人可以用一种优雅的方式来初始化这些类型的块中的内容(例如use
,with
等)。 最佳答案
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/