构造函数使用vararg在kotlin中调用

man*_*ish 8 java constructor kotlin

有没有什么方法来调用使用可变参数构造函数没有硬编码阵列参数(datain[0],datain[10],等).例如,

constructor(vararg datain:String): this(datain[0],datain[1],datain[2]){
}
Run Code Online (Sandbox Code Playgroud)

目前我这样打电话:

public class parent(var var1:String, var var2:String){
}

public class child(var var3:String, var1:String, var2:String): parent(var1,var2){
    constructor(vararg datain:String): this(datain[0],datain[1],datain[2]){
    }
}
Run Code Online (Sandbox Code Playgroud)

hot*_*key 13

它似乎有点无意义,因为vararg可以包含比其他构造函数所期望的更多或更少的项.此外,当所有参数具有相同的类型以便vararg将套件放置时,这种情况非常罕见.但不,目前没有语言功能会分解vararg为函数或构造函数调用非vararg参数.

我想,最好是语言设计让你明确地显示你选择某些项目,vararg因为它不包含任何隐藏的陷阱,你将始终了解索引.

但你可以将一个vararg参数作为vararg参数传递给另一个函数或构造函数,可能已经转换了它.它由spread运算符 完成*,请参见示例:

public class V(vararg s: String) {
    constructor(vararg s: Int): this("a", *s.map(Int::toString).toTypedArray(), "b")
}
Run Code Online (Sandbox Code Playgroud)

任何正确类型的数组都可以使用*(包括vararg它自己,因为它是一个数组),但它是vararg结束的力量.