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

时间:2015-07-14 18:58:56

标签: java constructor kotlin

有没有办法使用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]){
    }
}

1 个答案:

答案 0 :(得分:13)

似乎有点无意义,因为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的强大功能。