Kotlin中如何向可空类型ArrayList成功添加并存储null值
问题原因
标准java.util.ArrayList原生支持存储null元素,你遇到的null值添加后丢失,通常由两个原因导致:
- 初始化ArrayList时没有显式指定泛型为可空类型,类型推断出现偏差,运行时实际认定的元素类型为非空
Int,null值在添加时被过滤 - 导入的
ArrayList不是标准JDK实现,而是第三方库提供的禁止存储null的自定义List实现类
实现方法
方法1:构造时显式声明可空泛型
初始化ArrayList时直接在构造函数上标注泛型为Int?,从类型定义层面明确集合允许存储null值:
var intArray: ArrayList<Int?>? = null // 构造阶段显式指定可空泛型,避免推断为非空Int类型 intArray = ArrayList<Int?>() intArray.add(0) intArray.add(null) intArray.add(2)
这段代码执行后集合长度为3,调用intArray.get(1)会正常返回null。
方法2:使用Kotlin标准库函数初始化
调用Kotlin标准库提供的arrayListOf<Int?>()创建实例,返回的是明确支持null存储的标准ArrayList对象,写法更简洁:
val intArray = arrayListOf<Int?>() intArray.add(0) intArray.add(null) intArray.add(2)
排查提示
如果按上述写法修改后仍然无法存入null,可以在执行intArray.add(null)后打印该方法的返回值:标准ArrayList的add方法固定返回true,如果返回false,说明当前使用的List实现本身不支持存储null,检查import语句,确认导入的是java.util.ArrayList而非其他同名类即可。
内容的提问来源于stack exchange,提问作者MADi
相关产品推荐
相关产品推荐

