为什么这段代码可以无错编译执行?
val map = HashMap<Int, Long>()
val key :Int? = null
map.remove(key)
在 MutableMap remove 中声明为只接受不可为 null 的键,所以它甚至不应该编译。是 Kotlin 类型推断错误还是我遗漏了什么?
public fun remove(key: K): V?
最佳答案
您的代码非常好,因为 remove()
允许可以为 null 的参数 - 您的 map contents 定义没有任何内容。当 remove()
被调用时,它会尝试在 map 中找到匹配的请求键,因为它不存在(它不存在的原因完全无关 - 键不存在是有效的情况)没有会发生。编译器会提示的是任何尝试将此类键放入到您的 map 中。然后映射定义开始,因为已知不允许为 null 的键,所以这样的代码甚至不会编译,因为这显然是有错误的代码。
关于Kotlin 不可空映射允许删除 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59394864/