253 字
1 分钟
高阶函数

kotlin中一等公民是函数,函数也可以作为另一个函数的入参或者返回值,这就是高阶函数。 不过JVM本身是没有函数类型的,那Kotlin是如何实现这种效果的呢?先看段kotlin代码以及反编译了java的代码,一切就一目了然 image.png 我们可以看到,最终foo方法传入的类型是一个Function0类型,然后调用了Function0的invoke方法,继续看下Function0类型

public interface Function0<out R> : Function<R> {
/** Invokes the function. */
public operator fun invoke(): R
}

看来魔法就在这里 也就是说如下的两种写法也是等价的

//kotlin
fun main() {
foo {
println("foo")
}
}
//java
public static void main(String[] args) {
foo(new Function0<Unit>() {
@Override
public Unit invoke() {
System.out.println("foo");
return Unit.INSTANCE;
}
});
}

到这里是不是对高阶函数有着更深刻的认识了呢 Kotlin的高阶函数本质上是通过对函数的抽象,然后在运行时通过创建Function对象来实现的。

高阶函数
作者
强人自传
发布于
2024-01-15
许可协议
CC BY-NC-SA 4.0