MutableMap<;字符串,有吗?>;在Kotlin中使用委托时将值传递给var?
以下示例代码来自一个网页。我知道这些变量、城市和国家通过委托获得价值 我不明白map:MutableMap是如何将值传递给这些vars\u id、city和country的 我必须先将这些键的值传递给map吗?例如地图[“_id”]=132L,地图[“城市”]=“芜湖”和地图[“国家”]=“美国” 如果没有地图[“_id”],会发生什么?代码MutableMap<;字符串,有吗?>;在Kotlin中使用委托时将值传递给var?,kotlin,Kotlin,以下示例代码来自一个网页。我知道这些变量、城市和国家通过委托获得价值 我不明白map:MutableMap是如何将值传递给这些vars\u id、city和country的 我必须先将这些键的值传递给map吗?例如地图[“_id”]=132L,地图[“城市”]=“芜湖”和地图[“国家”]=“美国” 如果没有地图[“_id”],会发生什么?代码var\u id:Long by map是否会导致错误 class CityForecast(val map: MutableMap<String,
var\u id:Long by map
是否会导致错误
class CityForecast(val map: MutableMap<String, Any?>, val dailyForecast: List<DayForecast>) {
var _id: Long by map
var city: String by map
var country: String by map
constructor(id: Long, city: String, country: String, dailyForecast: List<DayForecast>)
: this(HashMap(), dailyForecast) {
this._id = id
this.city = city
this.country = country
}
}
class CityForecast(val地图:可变地图,val每日预测:列表){
var\u id:Long by map
var城市:按地图排列
var国家/地区:按地图字符串
构造函数(id:Long,城市:String,国家:String,dailyForecast:List)
:此(HashMap(),dailyForecast){
这个.\u id=id
这个城市
这个国家
}
}
首先,您需要了解委托财产是如何运作的。对象不直接拥有委托属性。它只拥有代理。例如,var\u id:Long by map
实际上看起来像
var _id: Long
get() {
val value = map["_id"] as? Long
if (value == null)
throw Excecption()
return value
}
set(value) {
map["_id"] = value
}
我必须先将这些键的值传递给map吗?例如地图[“_id”]=132L,地图[“城市”]=“芜湖”和地图[“国家”]=“美国”
不,这是一个运行时检查,就像lateinit
一样
如果没有地图[“_id”],会发生什么?代码var\u id:Long by map是否会导致错误
class CityForecast(val map: MutableMap<String, Any?>, val dailyForecast: List<DayForecast>) {
var _id: Long by map
var city: String by map
var country: String by map
constructor(id: Long, city: String, country: String, dailyForecast: List<DayForecast>)
: this(HashMap(), dailyForecast) {
this._id = id
this.city = city
this.country = country
}
}
当然,也会有例外
请注意,这是而不是推荐用于普通课堂。它是为JSON反序列化而设计的(不过我还是更喜欢GSON)。不建议这样做,因为您正在创建可以避免的潜在运行时异常,包括缺少值和类型检查
此外,如果不需要显式地使用HashMap()
,则应使用mutableMapOf()
而不是HashMap()
。检查并确认。