如何在lambda中初始化一个var
我一直遇到这样的情况:
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不知道何时调用lambda函数将会被调用,所以无法知道变量是否在您使用useAllData
的时候被初始化。 我怀疑这只是一个没有良好的解决方法的限制,但我希望有人有一个优雅的方式来初始化这些类型的块(如use
,等)
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)