Разрушение в Списке для более чем 5 элементов - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть массив 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 голосов
/ 02 декабря 2018

Функции componentX для List определены в пакете kotlin.collections.Вы найдете для компонентов с 1 по 5. Если вы хотите иметь больше, вы можете создать такие функции расширения, которые основаны на реальных реализациях, которые уже предоставлены:

/**
 * Returns 6th *element* from the collection.
 */
inline operator fun <T> List<T>.component6(): T = get(5)
0 голосов
/ 01 декабря 2018

Я решил это, объявив дополнительные componentN функции:

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

Примечание

Если мы хотим использовать Декларация о разрушении , нам нужнопометить класс ключевым словом data или предоставить функции component1, component2 ... componentN для столько значений, сколько мы хотим получить.

Для класса List сгенерированный файл _Collections.kt *Только 1017 * содержит функции compenentN до compenent5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...