为什么HashMap.get不返回可空类型?

fre*_*low 3 null nullpointerexception java-interop kotlin java-collections-api

我有点惊讶,以下示例抛出NullPointerException:

fun main(args: Array<String>) {
    val hm = HashMap<String, Int>()
    hm.put("alice", 42)
    val x = hm.get("bob")
    println(x)   // BOOM
}
Run Code Online (Sandbox Code Playgroud)

我以为NullPointerExceptionKotlin代码中没有s?

如果我使用x可选类型进行注释,则编程将打印null:

fun main(args: Array<String>) {
    val hm = HashMap<String, Int>()
    hm.put("alice", 42)
    val x: Int? = hm.get("bob")
    println(x)   // null
}
Run Code Online (Sandbox Code Playgroud)

我是否发现了一个特例,或者这是Kotlin/Java互操作的一般问题?

我正在使用带有Kotlin 0.11.91.1插件的IntelliJ IDEA 14.1社区版.

Kir*_*man 6

您的变量hm属于类型HashMap,因为这是一个平台类,其方法返回平台类型.科特林自身Map及其subtrait子接口MutableMap但是返回可空类型get().

将您的代码更改为

val hm : MutableMap<String, Int> = HashMap()
Run Code Online (Sandbox Code Playgroud)

它将打印"null".