List<String> 类型的解构声明初始值设定项必须具有“component6()”函数

6 android kotlin

考虑这个将字符串列表转换为某个对象的方法:

/**
 * Creates an Item from the provided list of strings
 */
private fun createFromStrings(strings: List<String>): Item {
    val (str1, str2, str3, str4, str5) = strings

    // some string manipulation
    return Item(someString)
}
Run Code Online (Sandbox Code Playgroud)

将第六个变量添加到解构声明中会产生以下错误:

List 类型的解构声明初始值设定项必须具有“component6()”函数

我可以从中推断出它List可以被解构为最多 5 个开箱即用的变量(也许是出于方便)。

有这方面的相关文档吗?Collections.kt 中是否有一些提示可以使这一点变得显而易见?或者这只是一个例子……看看什么有效,接受它,然后继续你的生活?

use*_*612 8

正如 @gpunto 正确所说,List它没有提供component6()开箱即用的方法,因此默认情况下您最多可以解构 5 个元素。但是,如果您确实需要/想要有第六个(或第七个或第 n 个)组件,您可以随时编写自己的扩展:

operator fun <T> List<T>.component6(): T = get(5)

fun main() {
    val aList = listOf("one", "two", "three", "four", "five", "six")
    val (_, _, _, _, _, s6) = aList // no compilation error
    println(s6) // prints "six"
}
Run Code Online (Sandbox Code Playgroud)