gpt4 book ai didi

kotlin - 当我在 Kotlin 中使用委托(delegate)时,MutableMap 如何将值传递给 var?

转载 作者:行者123 更新时间:2023-12-02 13:14:26 32 4
gpt4 key购买 nike

以下示例代码来自网页。我了解这些变量 _id、城市和国家/地区通过代表获得值(value)。

我不明白 map: MutableMap 如何将值传递给这些变量 _id、城市和国家?

我必须先将这些键的值传递给映射吗?比如map["_id"]=132L, map["city"]="Wuha"and map["country"]="USA"?

如果没有 map["_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
}
}

最佳答案

首先,您需要了解委托(delegate)属性的工作原理。对象不直接拥有委​​托属性。它只拥有代表。例如,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
}

Do I must pass value of these key to map first ? such as map["_id"]=132L, map["city"]="Wuha" and map["country"]="USA"?



不,它是运行时检查,就像 lateinit .

What happened if there is no map["_id"] ? will the code var _id: Long by map cause error?



当然,也会有异常(exception)。

请注意,这是 不是 推荐给普通类。它是为 JSON 反序列化而设计的(尽管我仍然更喜欢 GSON)。不建议这样做,因为您正在创建可以避免的潜在运行时异常,包括缺失值和类型检查。

此外,您应该使用 mutableMapOf()而不是 HashMap()如果您不需要 HashMap()明确地。

关于kotlin - 当我在 Kotlin 中使用委托(delegate)时,MutableMap<String, Any?> 如何将值传递给 var?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47065714/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com