以下示例抛出NullPointerException,我感到有些惊讶:

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

我以为Kotlin代码中没有NullPointerException

如果我用可选类型注释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
}

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

我正在将IntelliJ IDEA 14.1 Community Edition与Kotlin 0.11.91.1插件一起使用。

最佳答案

您的变量hm的类型为HashMap,因为这是一个平台类,所以其方法返回platform types。 Kotlin自己的 Map 及其子特性子接口(interface) MutableMap 返回 get() 的可空类型。

将您的代码更改为

val hm : MutableMap<String, Int> = HashMap()

它将显示“null”。

10-07 17:58