当我在Kotlin中使用委托时,MutableMap <String,Any>如何将值传递给var?
以下示例代码来自网页。 我明白,这些变数,城市和国家的价值由代表。
我无法理解map:MutableMap如何将值传递给_id,city和country?
我必须首先通过这些关键的价值来映射吗? 例如map [“_ id”] = 132L,map [“city”] =“Wuha”和map [“country”] =“USA”?
如果没有地图[“_ id”]会怎么样? 将代码var _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 } }
首先,您需要了解授权财产是如何运作的。 对象不直接拥有委托的属性。 它只拥有代表。 例如, var _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,map [“city”] =“Wuha”和map [“country”] =“USA”?
不,这是一个运行时检查,就像lateinit
一样。
如果没有地图[“_ id”]会怎么样? 将代码var _id:Long由map导致错误?
当然,会有例外。
请注意,这不是建议普通班。 它是专为JSON反序列化(我仍然更喜欢GSON)。 不建议这样做,因为您正在创建潜在的运行时异常,这可以避免,包括缺少值和类型检查。
此外,如果您不需要显式地使用HashMap()
则应该使用mutableMapOf()
而不是HashMap()
。