在列表上进行5个以上元素的分解

时间:2018-12-01 19:15:26

标签: json kotlin

我有一个包含五个以上元素的JSON数组。

尝试执行以下操作:

val (a, b, c, d, e, f, g) = JSON.array()

这将引发以下错误:

Kotlin: Destructuring declaration initializer of type List<Letter> must have a 'component6()' function

Kotlin: Destructuring declaration initializer of type List<Letter> must have a 'component7()' function

我不想编写以下代码:

val a = array[0], b = array[1] ...

2 个答案:

答案 0 :(得分:0)

我通过声明其他 componentN 函数来解决该问题:

operator fun List<Any>.component6() = this[5]
operator fun List<Any>.component7() = this[6]

注意

如果我们要使用 Destructuring声明,则需要使用data关键字标记该类,或为需要获取的任意数量的值提供component1, component2 ... componentN函数。

对于 List 类,生成的_Collections.kt文件仅 包含compenentN个函数,直到compenent5

答案 1 :(得分:0)

componentX的{​​{1}}函数在List包中定义。您将find it用于组件1到5。如果您想拥有更多组件,则可以基于已经提供的实际实现创建如下扩展功能:

kotlin.collections