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

如何在Kotlin中创建对象数组并按索引逐个赋值?运行代码无错闪退

问题根因

你闪退的核心原因是Kotlin数组是定长结构,arrayOf<User>()创建的是长度为0的空数组,没有分配任何元素的存储空间,直接用array[0]、array[1]这种超出数组长度的下标赋值会触发ArrayIndexOutOfBoundsException,未捕获的话就会直接闪退。你没看到错误抛出大概率是App全局异常捕获机制吞了崩溃栈,在Logcat中筛选Error级别日志即可看到对应的异常栈信息。

可用解决方案

方案1:初始化数组时直接指定长度

如果你明确知道数组的元素数量,可以用Array构造器先创建固定长度的数组,再逐个赋值:

// 先创建长度为3的可空User数组,初始值全为null
val array = Array<User?>(3) { null }
array[0] = User("name1", "address1")
array[1] = User("name2", "address2")
array[2] = User("name3", "address3")

也可以在初始化时直接完成元素赋值:

val array = Array(3) { index ->
    when(index) {
        0 -> User("name1", "address1")
        1 -> User("name2", "address2")
        2 -> User("name3", "address3")
        else -> User("", "")
    }
}

方案2:动态增删元素优先用可变列表

如果你的数组长度不固定,需要动态新增/删除元素,优先使用MutableList,后续需要数组时再做转换即可:

val list = mutableListOf<User>()
list.add(User("name1", "address1"))
list.add(User("name2", "address2"))
list.add(User("name3", "address3"))
// 需要数组时调用转换方法即可
val array = list.toTypedArray()

方案3:初始化时直接传入所有元素

如果一开始就确定了所有元素,直接把元素传入arrayOf方法即可,不需要后续逐个赋值:

val array = arrayOf(
    User("name1", "address1"),
    User("name2", "address2"),
    User("name3", "address3")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:45:03