点击领取优惠~
253 字
1 分钟
高阶函数
kotlin中一等公民是函数,函数也可以作为另一个函数的入参或者返回值,这就是高阶函数。
不过JVM本身是没有函数类型的,那Kotlin是如何实现这种效果的呢?先看段kotlin代码以及反编译了java的代码,一切就一目了然
我们可以看到,最终foo方法传入的类型是一个Function0类型,然后调用了Function0的invoke方法,继续看下Function0类型
public interface Function0<out R> : Function<R> { /** Invokes the function. */ public operator fun invoke(): R}看来魔法就在这里 也就是说如下的两种写法也是等价的
//kotlinfun main() { foo { println("foo") }}//javapublic static void main(String[] args) { foo(new Function0<Unit>() { @Override public Unit invoke() { System.out.println("foo"); return Unit.INSTANCE; } });}到这里是不是对高阶函数有着更深刻的认识了呢 Kotlin的高阶函数本质上是通过对函数的抽象,然后在运行时通过创建Function对象来实现的。
高阶函数