首页 > 解决方案 > Kotlin elvis 运算符回退函数调用链中任何 null 情况

问题描述

?:如果以下函数调用之一正在返回,我想知道是否调用了elvis 运算符null

  private fun extractProductAttributes(productEntity: JSONObject): List<JSONObject> {
        return productEntity.optJSONObject("Entity")
                ?.optJSONObject("Attributes")
                ?.optJSONArray("Attribute")
                ?.toList() as List<JSONObject>
                ?: listOf()
    }

如果其中任何一个函数返回null,我想回退到一个空的不可变列表。这是否像预期的那样工作?

标签: kotlin

解决方案


是的,它会。让我们分解代码,看看它是如何工作的......

假设,你有这个代码,

a?.b?.c ?: d

如果aa.b或中的任何一个a.b.c为 null,则d返回。

参考:


附带说明一下,您需要在此处使用安全演员表。

productEntity.optJSONObject("Entity")
                ?.optJSONObject("Attributes")
                ?.optJSONArray("Attribute")
                ?.toList() as? List<JSONObject>
                ?: listOf()

推荐阅读