如果我有下面的 Kotlin 方法并从 Java 调用它,那么我在 Java 中得到的返回类型是什么?
fun ff(): (Int, Int) -> Int {
return { x, y -> x + y }
}
Kotlin 函数类型(T1, ..., TN) -> R
由FunctionN<T1, ..., TN, R>
Kotlin 运行时的类型表示。
有一个规范文档描述了当前状态下语言设计的这一方面。
它特别说明了 JVM 的 Kotlin 运行时中有 23 种函数类型 from Function0
to Function22
(作为kotlin-runtime
库提供),如下所示:
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;
/* ... */
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句