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

Kotlin中如何避免嵌套列表的IndexOutOfBoundsException?有无惯用写法?

Kotlin中嵌套列表访问避免数组越界的惯用写法

直接用listA[0].listB[0].listC[0].department这种链式索引访问,只要任意一个列表的索引0不存在,就会抛出IndexOutOfBoundsException。Kotlin里有几种符合风格的惯用写法来避免这个问题:

  • 基础安全访问:getOrNull + 安全调用运算符
    Kotlin的List自带getOrNull(index)方法,索引越界时会返回null,配合安全调用?.可以让链式调用在遇到null时直接终止,不会抛出异常。示例代码:

    val department = listA.getOrNull(0)
        ?.listB?.getOrNull(0)
        ?.listC?.getOrNull(0)
        ?.department
    

    最终department的值要么是目标部门,要么是null,全程不会触发数组越界异常。

  • 带默认值的安全访问:配合Elvis运算符
    如果不想返回null,可以用?: Elvis运算符指定默认值,当链式调用结果为null时直接返回默认值:

    val department = listA.getOrNull(0)
        ?.listB?.getOrNull(0)
        ?.listC?.getOrNull(0)
        ?.department ?: "未知部门"
    
  • 分步处理空情况:结合run/let
    如果需要针对每一步的空值做单独处理(比如不同层级为空时返回不同提示),可以嵌套使用run或let:

    val department = listA.getOrNull(0)?.run {
        listB.getOrNull(0)?.run {
            listC.getOrNull(0)?.department ?: "listC无索引0元素"
        } ?: "listB无索引0元素"
    } ?: "listA无索引0元素"
    

这些写法都充分利用了Kotlin的空安全特性,不需要写繁琐的if (list.size > index)判断,代码简洁且符合Kotlin的惯用风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:39:58