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

如何将非空类型传递给参数为可空类型的函数

问题根因

Kotlin中的数组是泛型不变的,和单个基础类型的可空/非空继承逻辑完全不同:

  • 单个变量场景下,String 是 String? 的子类型,因此非空类型可以直接赋值给可空类型变量,也就是你最初示例中赋值生效的原因
  • 数组场景下,Array<String> 和 Array<String?> 不存在父子继承关系,因此无法直接赋值
可行实现方案

方案1:生成新的可空类型数组(最推荐,类型安全)

通过展开运算符拷贝原数组,直接生成元素为可空类型的新数组,代码如下:

var var3: Array<String?> = arrayOf(*var2)

该方案会生成独立的新数组对象,后续对var3的修改不会影响原var2数组,完全符合Kotlin的类型安全要求,无任何潜在风险。你也可以用map写法实现相同效果:

var var3: Array<String?> = var2.map { it }.toTypedArray()

方案2:unchecked强转(仅适用于可控的只读场景)

如果你可以100%确认后续不会通过var3向数组中写入null元素,可以直接进行强转:

var var3: Array<String?> = var2 as Array<String?>

警告:该方式不会生成新数组,var3和var2指向同一个数组对象。如果后续通过var3写入null值,会打破var2的非空类型约定,访问var2元素时会直接触发空指针异常,非必要不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:18:01