首页 > 解决方案 > 具有少于预期组件的组件解构

问题描述

假设我想做以下事情:

val (k, v) = pair.split("=".toRegex(), 2)

如果我总是从拆分中获取 2 个组件,则此代码很好 - 但是,如果字符串中不存在分隔符,则此代码将引发异常,因为数组中的第二个元素不存在。

答案几乎肯定是“不”,但有没有办法强制解构为缺失的组件分配空值?

标签: kotlindestructuring

解决方案


解构对象时,Kotlin 调用componentN()该对象。对于数组,component1()等于get(0)component2()等于get(1),依此类推。

因此,如果索引超出范围,它将抛出ArrayIndexOutOfBoundsException,而不是返回null


但是您可以使您的操作员功能如下:

operator fun <T> Array<out T>.component1(): T? = if (size > 0) get(0) else null
operator fun <T> Array<out T>.component2(): T? = if (size > 1) get(1) else null

所以如果我跑

val (k, v) = arrayOf(1)

println(k)
println(v)

输出将是

1
null

看:


推荐阅读