我希望使用return而不是let,所以我写了 Code B,但是 Code B 无法编译,出现两个错误,为什么?
错误:(30, 10) 此处不允许“返回”
错误:(30, 45) 类型不匹配:推断的类型是 CityForecast?但预计 CityForecast
代码 A
override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use {
val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?"
val dailyForecast = select(DayForecastTable.NAME)
.whereSimple(dailyRequest, zipCode.toString(), date.toString())
.parseList { DayForecast(HashMap(it)) }
val city = select(CityForecastTable.NAME)
.whereSimple("${CityForecastTable.ID} = ?", zipCode.toString())
.parseOpt { CityForecast(HashMap(it), dailyForecast) }
city?.let { dataMapper.convertToDomain(it) }
}
Run Code Online (Sandbox Code Playgroud)
代码 B
override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use {
val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?"
val dailyForecast = select(DayForecastTable.NAME)
.whereSimple(dailyRequest, zipCode.toString(), date.toString())
.parseList { DayForecast(HashMap(it)) }
val city = select(CityForecastTable.NAME)
.whereSimple("${CityForecastTable.ID} = ?", zipCode.toString())
.parseOpt { CityForecast(HashMap(it), dailyForecast) }
return dataMapper.convertToDomain(city)
}
Run Code Online (Sandbox Code Playgroud)
小智 6
convertToDomain期待一个非 nullCityForecast而不是 nullable CityForecast?。所以,使用let是一个更好的方法。否则,您必须city像这样强制解开可空值:
dataMapper.convertToDomain(city!!)
Run Code Online (Sandbox Code Playgroud)
return@use dataMapper.convertToDomain(city!!)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1608 次 |
| 最近记录: |