从Kotlin调用通用Java varargs方法

从Kotlin调用通用Java varargs方法,kotlin,apache-kafka-streams,Kotlin,Apache Kafka Streams,我试图从Kotlin调用以下Java方法: KStream<K, V>[] branch(final Predicate<? super K, ? super V>... predicates); KStream[]branch(final Predicate不幸的是,可变长度参数不支持它。您可以通过将(K,V)->布尔值转换为谓词来解决它,如下所示: fun <K, V> KStream<K, V>.kbranch(vararg predica

我试图从Kotlin调用以下Java方法:

KStream<K, V>[] branch(final Predicate<? super K, ? super V>... predicates);
KStream[]branch(final Predicate不幸的是,可变长度参数不支持它。您可以通过将
(K,V)->布尔值
转换为
谓词
来解决它,如下所示:

fun <K, V> KStream<K, V>.kbranch(vararg predicates: (K, V) -> Boolean): Array<KStream<K, V>> {
    val arguments = predicates.map { Predicate { key: K, value: V -> it(key, value) } }
    return this.branch(*arguments.toTypedArray())
}
fun KStream.kbranch(vararg谓词:(K,V)->布尔):数组{
val arguments=predicates.map{Predicate{key:K,value:V->it(key,value)}
返回此.branch(*arguments.toTypedArray())
}

实际上你可以这样定义

fun <in K, in V> KStream<K, V>.kbranch(vararg predicates: out Predicate<K, V>):
    Array<KStream<K, V>> = this.branch(*predicates)
fun KStream.kbranch(vararg谓词:out谓词):
数组=this.branch(*谓词)

非常感谢,这正是我需要的!
fun <K, V> KStream<K, V>.kbranch(vararg predicates: (K, V) -> Boolean): Array<KStream<K, V>> {
    val arguments = predicates.map { Predicate { key: K, value: V -> it(key, value) } }
    return this.branch(*arguments.toTypedArray())
}
fun <in K, in V> KStream<K, V>.kbranch(vararg predicates: out Predicate<K, V>):
    Array<KStream<K, V>> = this.branch(*predicates)