Java转Kotlin 2.1.20:如何创建非空Object类型数组?
Kotlin中将非空元素ArrayList转为非空Object数组的解决方案
已知ArrayList list 包含N个非空Object,要转换为Array<Object>而非Array<Object?>,可以通过以下几种方式实现:
1. 最优方案:直接使用Array构造函数初始化
利用Kotlin的Array构造函数,直接基于list的元素生成非空数组,一步到位:
val array: Array<Object> = Array(N) { list.removeAt(0) }
原理:构造函数的初始化lambda会返回list.removeAt(0)的结果(已知为非空Object),编译器会自动推断数组类型为Array<Object>,无需处理可空中间态。
2. 从可空数组转换为非空数组
如果已经通过arrayOfNulls创建了可空数组,可通过以下两种安全方式转换:
方式一:使用requireNoNulls()校验并转换
该方法会检查数组中是否存在null元素,确认无null后返回非空类型数组(若有null则抛出异常):
val nullableArray: Array<Object?> = arrayOfNulls(N) for (i in 0..<N) nullableArray[i] = list.removeAt(0) val array: Array<Object> = nullableArray.requireNoNulls()
方式二:unchecked cast(谨慎使用)
若能100%确认数组中无null元素,可通过强制转换跳过编译检查,但需添加注解抑制unchecked cast警告:
@Suppress("UNCHECKED_CAST") val array: Array<Object> = arrayOfNulls(N) as Array<Object> for (i in 0..<N) array[i] = list.removeAt(0)
注意:这种方式会绕过Kotlin的类型安全检查,若后续代码意外向数组中插入null,会导致运行时问题,仅在场景明确时使用。
内容的提问来源于stack exchange,提问作者Leszek
相关产品推荐
相关产品推荐

