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

Kotlin中let函数未拦截空对象引发NullPointerException问题

问题分析与解决

你的item.material?.let确实生效了——当material为null时,let块内的代码不会执行。但问题出在map操作的结果上:当material为null时,对应位置的map返回值是null,最终clothes列表中会混入null元素。后续你处理这个列表时,若直接对这些null对象调用getStatus(),就会触发NullPointerException。

解决方案

1. 过滤null元素(推荐)

使用mapNotNull替代map,自动过滤掉所有null结果,确保clothes列表中全是非空对象:

val clothes = items.mapNotNull { item ->
    item.material?.let { material ->
        Mapper.fromRetrofitResponseToObjectEntity(material, item)
    }
}

2. 为null场景设置默认值

如果业务需要保留所有元素(即使material为null也要对应一个实体),可以用?:运算符提供默认实体:

val clothes = items.map { item ->
    item.material?.let { material ->
        Mapper.fromRetrofitResponseToObjectEntity(material, item)
    } ?: ClothEntity(status = Status.UNKNOWN) // 替换为你的默认实体构造逻辑
}

3. 检查Mapper方法的返回值

确认Mapper.fromRetrofitResponseToObjectEntity方法是否可能在material非null时返回null。如果存在这种情况,需要在方法内部处理null返回的问题,或者在let块后追加判空逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:09:24