以下示例抛出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”。