You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中let块调用nullable对象方法报错,提示需安全调用如何解决?

问题原因与解决方案

为什么会报错?

你写的parent.let是普通调用,不管parent是不是null,这个let块都会执行。当parent为null时,it的类型依然是ParentInterface?(可空类型),所以直接调用it.getWidth()会触发Kotlin的空安全检查报错。你误以为let加?:能实现类似else的逻辑,但实际上只有用安全调用的?.let,才会只在parent非null时执行块内代码。

正确写法

写法一:用?.let配合?:(推荐)

return parent?.let {
    it.getWidth() * (perWidth / 100.0f)
} ?: App.realWidth.toFloat()
  • parent?.let:只有parent非null时才会执行块内代码,此时it会被Kotlin智能转换为非null的ParentInterface类型,直接调用getWidth()完全安全。
  • 如果parent为null,?.let会返回null,这时?:就会执行后面的默认值逻辑。

写法二:用if-else结构(更直观)

如果觉得let的写法有点绕,也可以用最直接的if判断:

return if (parent != null) {
    parent.getWidth() * (perWidth / 100.0f)
} else {
    App.realWidth.toFloat()
}

内容的提问来源于stack exchange,提问作者NullPointerException

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:57:19