You need to enable JavaScript to run this app. Kotlin向varargs可变参数传可空展开数组时如何优雅处理null报错
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin向varargs可变参数传可空展开数组时如何优雅处理null报错

Kotlin 可空数组展开传参编译报错解决

报错原因

Kotlin 展开运算符 * 仅支持对非空数组类型做操作。原代码 *source?.toArrOfPairs() 中,安全调用符 ?. 会让整个表达式返回可空类型 Array<Pair<Any?, Any?>?>,不满足展开运算符的参数类型要求,因此触发编译错误。

实现方案

结合 Kotlin 标准库的空安全扩展,仅需简单改写即可同时覆盖两个业务场景,无需额外编写判空分支:

  • 场景1:仅传入展开数组,source 为 null 时自动以空数组完成调用
    改写代码:
    trackEvent(
        *source?.toArrOfPairs().orEmpty()
    )
    
    逻辑效果:当 source?.toArrOfPairs() 返回 null 时,orEmpty() 会自动返回空的键值对数组,展开后等价于无参调用 trackEvent(),无额外参数传入。
  • 场景2:固定参数+展开数组组合调用,source 为 null 时自动跳过展开参数
    改写代码:
    trackEvent(
        "time" to timeStr,
        *source?.toArrOfPairs().orEmpty()
    )
    
    逻辑效果:当 source 为 null 时,展开部分的空数组不会传递任何额外参数,最终 trackEvent 仅接收到预先声明的固定键值对,完全符合传参预期。

补充说明

用到的 orEmpty() 是 Kotlin 标准库为可空数组、集合提供的内置扩展方法,会在接收者为 null 时返回对应类型的空实例,全程由编译器做类型安全校验,不会引入空指针风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 08:24:10