如何在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
相关产品推荐
相关产品推荐

