List <String>类型的解构声明初始化程序必须具有'component6()'函数

时间:2019-07-15 08:14:37

标签: 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)
}

在解构声明中添加第6个变量会产生以下错误:

  

List类型的解构声明初始化程序必须具有一个   'component6()'函数

由此我可以推断出List可以被分解为最多5个变量(可能是出于方便的目的)。

是否有相关文件?在Collections.kt中是否有一些使这一点显而易见的提示?还是只是一种情况..看看有什么用,接受它,然后继续生活?

1 个答案:

答案 0 :(得分:0)

正如@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"
}