kotlin - 为什么 kotlin 不允许空安全索引运算符?
问题描述
我们在访问 Maps 时已经习惯了索引操作符。
fun fun1(map: Map<*, *>) {
assert(map.get("key") === map["key"])
}
但是为什么索引运算符不能用于可为空的 Map 呢?以下代码无法编译。
fun fun2(map: Map<*, *>?) {
assert(map?.get("key") === map?["key"])
}
^^^
解决方案
为什么 kotlin 不允许空安全索引运算符?
您不能使用的原因map?.[K]
是因为它不受支持的语法。这是一个长期存在的功能要求。这是一个 4 年前的问题:
https ://youtrack.jetbrains.com/issue/KT-8799
请改用等效的方法语法,即map.get(T)
代替map[T]
,即您首先拥有的方法:
fun fun2(map: Map<*, *>?) {
assert(map?.get("key") === map?.get("key"))
}
您可以在官方文档中找到.get()
实现该[]
运算符的内容。也就是说,编译器是在幕后翻译[]
的.get()
,所以这种情况下还不如直接调用。
推荐阅读
- php - 在 prestashop 1.7 中为每个订单分配订单 ID 而不是订单参考
- asp.net - HTML.TextAreaFor 我需要将日期/时间戳添加到字段中添加的新评论中
- laravel - Laravel 路由正确或更好的方式
- netbeans - “新项目”和“新文件”不起作用
- css - 如何更改选定列闪亮R的背景颜色
- java - 为什么在将数据从活动传递到片段时出现空指针异常?
- javascript - 三元javascript运算符中条件的多个结果
- git - Git diff 两个名称中带有点 (.) 的分支
- jquery - VueJS 和 jQuery 查询选择器
- r - 如果向量的任何值在列表中,则返回 true