为什么Kotlin不允许使用空安全索引运算符?

时间:2019-10-31 12:09:49

标签: kotlin

访问地图时,我们习惯于索引运算符。

fun fun1(map: Map<*, *>) {
    assert(map.get("key") === map["key"])
}

但是为什么索引运算符不能用于可为null的Map? 以下代码无法编译。

fun fun2(map: Map<*, *>?) {
    assert(map?.get("key") === map?["key"])
}
                                  ^^^ 

1 个答案:

答案 0 :(得分:1)

  

为什么Kotlin不允许使用空安全索引操作符?

不能使用my_list=['arnold', 'matt', 'david', 'james'] found = False search_item = input("type a name to find") start_range = 0 end_range = len(my_list) while found == False and start_range <= end_range: mid = (start_range + end_range) //2 if search_item == my_list[mid]: found == True print("item found") else: if my_list[mid] >= search_item: end_range = mid -1 else: start_range = mid +1 if found == False: print("item not found") 的原因是不支持的语法。这是一个长期存在的功能要求。这是一个有4年历史的期刊: https://youtrack.jetbrains.com/issue/KT-8799

请使用等效的方法语法,即map?.[K]而不是map.get(T),即您首先拥有的语法:

map[T]

您可以在official docs中发现fun fun2(map: Map<*, *>?) { assert(map?.get("key") === map?.get("key")) } 是实现.get()运算符的原因。换句话说,编译器会将[]转换为幕后的[],因此在这种情况下,您最好直接调用它。