Kotlin:你必须要知道的-inline-noinline-crossinline,灵魂拷问

使用 inline 声明的函数,在编译时将会拷贝到调用的地方。

###inline function

定义一个sum函数计算两个数的和。

fun main(args: Array) {
println(sum(1, 2))
}

fun sum(a: Int, b: Int): Int {
return a + b
}

反编译为 Java 代码:

public static final void main(@NotNull String[] args) {
int var1 = sum(1, 2);
System.out.println(var1);
}

public static final int sum(int a, int b) {
return a + b;
}

正常的样子,在该调用的地方调用函数。

然后为 sum 函数添加 inline 声明:

inline fun sum(a: Int, b: Int): Int {
return a + b
}

再反编译为 Java 代码:

public static final void main(@NotNull String[] args) {
//…
byte a i v = 1 ; i n t b iv = 1; int b iv=1;intbiv = 2;
int var4 = a i v + b iv + b iv+biv;
System.out.println(var4);
}

public static final int sum(int a, int b) {
return a + b;
}

sum 函数的实现代码被直接拷贝到了调用的地方。

上面两个使用实例并没有体现出 inline 的优势。当你的函数中有 lambda 形参时,inline 的优势才会体现。

###inline function with lambda parameters

考虑如下代码,会被编译成怎样的 Java 代码?

fun sum(a: Int, b: Int, lambda: (result: Int) -> Unit): Int {
val r = a + b
lambda.invoke®
return r
}

fun main(args: Array) {
sum(1, 2) { println(“Result is: $it”) }
}

反编译为 Java:

public static final int s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值