Kotlin函数类型在运行时的Java类型是什么?

时间:2018-02-28 21:03:46

标签: java kotlin

如果我使用Kotlin方法并从Java调用它,那么我在Java中获得的返回类型是什么?

fun ff(): (Int, Int) -> Int {
    return { x, y -> x + y }
}

1 个答案:

答案 0 :(得分:1)

Kotlin函数类型(T1, ..., TN) -> R由Kotlin运行时的FunctionN<T1, ..., TN, R>类型表示。

有一个specification document描述了当前状态下语言设计的这个方面。

它特别指出,JVM的Kotlin运行时中有Function0Function22的23种函数类型(作为kotlin-runtime库提供),如下所示: / p>

package kotlin.jvm.functions

interface Function1<in P1, out R> : kotlin.Function<R> {
    fun invoke(p1: P1): R
}

扩展函数类型TR.(T1, ..., TN) -> R与正常函数类型具有相同的运行时表示形式,接收器前置于参数列表,即(TR, T1, ..., TN) -> R

具有22个以上参数的函数在运行时由单个类型表示:

package kotlin.jvm.functions

interface FunctionN<out R> : kotlin.Function<R> {
    val arity: Int
    fun invokeVararg(vararg p: Any?): R
}

在Kotlin / JS中,函数值以JS自然的方式表示,即它们被编译为函数定义及其引用:

function main$lambda(s1, s2) {
    println(s1 + s2);
    return Unit;
}

function main(args) {
    var f = main$lambda;
    /* ... */
}