Kotlin 不可空映射允许删除 null

标签 kotlin hashmap nullable

为什么这段代码可以无错编译执行?

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/

相关文章:

kotlin - 如何在Kotlin中返回等待的值?

java - 为 Java 7 使用快速且恒定的 get() 进行映射

java - 哈希集可以在内部使用一些其他集合而不是 HashMap 吗

java - HashMap 到 txt 文件 - 在 Java OOP 中写入键和值

c# - 为什么接受引用类型的泛型方法不接受可空类型作为参数?

android - 我应该为每个 recyclerview 创建适配器吗?

android - 任务 ':app:kaptDebugKotlin' 执行失败。 > 执行 org.jetbrains.kotlin.gradle.internal.KaptExecution 时发生故障

java - Android 无法实例化一个或多个类

java - @NotNull 和@Nullable,与java 注解相矛盾

c# - C# 中如果参数不为 null 则调用函数