如果我使用Kotlin方法并从Java调用它,那么我在Java中获得的返回类型是什么?
fun ff(): (Int, Int) -> Int {
return { x, y -> x + y }
}
答案 0 :(得分:1)
Kotlin函数类型(T1, ..., TN) -> R
由Kotlin运行时的FunctionN<T1, ..., TN, R>
类型表示。
有一个specification document描述了当前状态下语言设计的这个方面。
它特别指出,JVM的Kotlin运行时中有Function0
到Function22
的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;
/* ... */
}