Kotlin内联函数

高阶函数

高阶函数就是方法(函数)的参数或者返回是一个函数

内联函数

内联函数就是在编译时直接将函数内容直接复制粘贴到调用处

普通函数并不需要,如果在普通函数强行加上inline,编辑器会提醒

只有高阶函数中才需要inline去做内联优化

原因是虽然inline关键字理论上可以减少一个栈帧层级(栈帧在虚拟机栈)但是一般函数没有必要

高阶函数:如下,block: (String)本质上是使用匿名类的实现方式,这样就会造成额外的内存开销。为了解决这个问题,kotlin引入inline内联功能,将Lambda表达式带来的性能开销消除。

kotlin 复制代码
fun requestInfo() {
    highFuc("inline") { str ->
        println(str)
    }
}
fun highFuc(name: String, block: (String) -> Unit) {
    block(name)
}
kotlin 复制代码
fun requestInfo() {
    highFuc("inline") { str ->
        println(str)
    }
}

//注意:这里添加了inline关键字
inline fun highFuc(name: String, block: (String) -> Unit) {
    block(name)
}

转换成java之后:

java 复制代码
public final void requestInfo() {
   String name$iv = "inline";
   System.out.println(name$iv);
}
  • inline:编译时直接将函数内容直接复制粘贴到调用处。
  • noinline:当函数被inline标记时,使用noinline可以使函数参数不被内联。
  • crossinline: 允许内联函数里的函数类型参数可以被间接调用,但是不能在Lambda表达式中使用全局return返回

参考

相关推荐
故渊at4 分钟前
第十五板块:Android 系统调试与逆向工程 | 第三十六篇:Smali 字节码语义与 Dalvik 指令集
android·指令集·dalvik·smali·字节码语义
码云骑士9 分钟前
05-Python字典底层原理-Hash表与有序性的真相
开发语言·python·哈希算法
J2虾虾9 分钟前
Android支持Java语言的标准
android·java·开发语言
Cloud_Shy61810 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 44 - 47)
开发语言·人工智能·经验分享·笔记·python
mxlwd16812 分钟前
movielen 100k lr模型训练过程
开发语言·python·机器学习
charlee4413 分钟前
Unity在安卓端如何调试输出信息
android·unity·adb·游戏引擎·真机调试
法欧特斯卡雷特17 分钟前
从 Kotlin 编译器 API 的变化开始: 2.4.0
android·开源·github
贾艺驰19 分钟前
实战Android Framework: 新增一个系统服务
android·源码
火山上的企鹅21 分钟前
Codex实战:APP远程升级服务搭建(五)App端远程升级接入
android·服务器·远程升级·qgc