使用 vararg 在 kotlin 中调用构造函数
Constructor call in kotlin using vararg
有没有什么方法可以使用可变参数调用构造函数而不对数组参数进行硬编码(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
参数传递给另一个函数或构造函数,可能已经对其进行了转换。由spread operator*
完成,看例子:
public class V(vararg s: String) {
constructor(vararg s: Int): this("a", *s.map(Int::toString).toTypedArray(), "b")
}
任何正确类型的数组都可以使用 *
传递(包括 vararg
本身,因为它是一个数组),但它是 vararg
的强大之处。
有没有什么方法可以使用可变参数调用构造函数而不对数组参数进行硬编码(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
参数传递给另一个函数或构造函数,可能已经对其进行了转换。由spread operator*
完成,看例子:
public class V(vararg s: String) {
constructor(vararg s: Int): this("a", *s.map(Int::toString).toTypedArray(), "b")
}
任何正确类型的数组都可以使用 *
传递(包括 vararg
本身,因为它是一个数组),但它是 vararg
的强大之处。