可变数量的通用参数

问题描述 投票:0回答:1

我有一组不同类型的参数。我想和他们一起做一些手术。但前提是其中至少有一个不为空。

我的代码是这样的:

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 个。 是否可以创建一个执行相同操作但接受可变数量参数的函数?

我有多个针对不同数量参数的函数,但我只想有一个通用函数。

function kotlin variables generics block
1个回答
0
投票

正如 @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)                
}
© www.soinside.com 2019 - 2024. All rights reserved.