我有一组不同类型的参数。我想和他们一起做一些手术。但前提是其中至少有一个不为空。
我的代码是这样的:
fun <A, B, C, R> atLeastOneNotNull(a: A?, b: B?, c: C?, block: (A?, B?, C?) -> R): R? {
return if (atLeastOneNotNull(a, b) { _, _ -> } != null || c != null) {
block(a, b, c)
} else {
null
}
}
但是参数的数量在不同的用例中是不同的。在此示例中,我们有 3 个,但也可以是 2 个或 5 个。 是否可以创建一个执行相同操作但接受可变数量参数的函数?
我有多个针对不同数量参数的函数,但我只想有一个通用函数。
正如 @Pawel 建议的那样,您应该使用
vararg
(或可变数量的参数)来为函数提供任何所需数量的不同类型的元素。不要忘记在数组名称之前使用 *
(扩展运算符):
fun atLeastOneNotNull(vararg collection: Any?): Any {
return collection.mapNotNull() { it }
}
fun main() {
val elements: Array<Any?> = arrayOf("Kotlin", null, 2.0, null, true)
val notNullElements = atLeastOneNotNull(*elements)
println(notNullElements)
}