有什么方法可以使用varargs调用构造函数而无需对数组参数(datain[0]datain[10]等)进行硬编码。例如,

constructor(vararg datain:String): this(datain[0],datain[1],datain[2]){
}

目前,我这样打电话:
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]){
    }
}

最佳答案

因为vararg可以包含比其他构造函数期望的更多或更少的项目,所以这似乎没有什么意义。同样,当所有参数都具有相同的类型以便vararg适合时,这种情况非常罕见。但是不,目前没有语言功能可以将vararg分解为函数或构造函数调用的非vararg参数。

我想,对于语言设计来说,最好让您明确地表明它选择vararg的某些项,因为它不包含任何隐患,并且您将始终意识到索引是更好的选择。

但是您可以做的是将vararg参数作为vararg参数传递给另一个函数或构造函数,可能是已经对其进行了转换。这是由传播运算符 *完成的,请参见示例:

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

可以使用*(包括vararg本身,因为它是一个数组)来传递任何正确类型的数组,但这是vararg的作用所在。

07-27 19:10