【发布时间】:2017-01-31 20:04:59
【问题描述】:
我经常遇到这样的情况:
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 等)
【问题讨论】:
-
顺便说一句,我知道我可以在声明中执行类似
var allData: List<ResponseData>? = null的操作,然后将useAllData调用更改为useAllData(allData!!)。这行得通,但并不真正符合我对“优雅”的定义。
标签: kotlin