我一直碰到这样的情况:
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何时会被调用,因此无法知道变量是否在到达{{1}时被初始化}}。我怀疑这只是一个没有良好解决方法的限制,但我希望有人能够优雅地初始化这些块中的事物(例如useAllData
,use
等。)
答案 0 :(得分:2)
Kotlin的use
返回结果,您可以将结果直接分配给变量以避免此类问题。 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)