js css html

Kotlin学习之 inline

2022-10-15  本文已影响0人  在岁月中远行

inline它是Kotlin中的一个关键字,用来修饰函数function,此时这个函数可以就被称为内联函数

当你调用一个内联函数的时候,编译器不会产生一次函数调用,不会有压栈出栈。而是会在每次调用时,将inline function中的代码直接复制到调用处。

在Kotlin中如何去声明一个inline function呢?

直接在普通函数前加一个inline关键字修饰,就可以将一个普通的函数变成一个内联函数。

现在我们来看看原理:

我们可以查看字节码进行对比,会发现sayHello代码直接出现在getInline方法中,没有存在Method invocation和public final sayHello(Ljava/lang/String;)V这种。

当我们把鼠标放在inline关键字这,会发现有个提示,意思就是这个函数目前声明inline是没有意义的,需要和接收函数类型(lambda)的fun一起使用。

我们再写个简单示例:在getInline方法中调用method方法 method参数是一个函数类型也就是lambda表达式。

我们查看字节码会在getInline方法中创建了一个匿名内部类的对象,也就说只是语法和写代码时简便了,本质上没变。

没有生成这个匿名内部类对象了,直接把method is called字符串嵌入到调用处也就是getInline这,我们可以由此知道编译器怎么编译的inline函数的了。inline通常需要和接收函数类型参数的function配合使用。

使用inline函数的几个注意点:

1 不能在public(默认)方法中访问私有的成员

私有的方法可以访问私有的成员变量

2 有return 语句时需要注意:

当调用main()方法时,如果直接写return那么后面的Log.d("tanyonglin","end execution")就不会执行,

当返回return@sayHello时候以return@label标签形式,只是结束内部函数。这个很好理解。

上一篇 下一篇

猜你喜欢

热点阅读