目录
5、如何在AndroidStudio中查看kotlin编译后的class源码
1、定义:
高阶函数是指: 函数(Lambda)的参数是函数(Lambda)
2、Unit的定义
/**
* Unit的定义:在kotlin中当一个函数没有返回值的时候,默认返回一个Unit类型。
* 我们大部分情况是可以省略这个Unit的,但是当参数是一个没有
* 返回值的Lambda匿名函数的话,就需要声明出来
*/
3、高阶函数的实现:
下面的gaoFun()函数的参数除了一个布尔类型的isSay以外,还有一个lambda函数作为了参数。这种函数我们就称之为高阶函数。
fun gaoFun(isSay: Boolean, lambda: () -> Unit) {
if (isSay) {
println("高阶函数的参数lambda()匿名函数传了进来")
lambda()
}
}
//main()函数的Unit就是省略的。(这里我特意加上了)
fun main(): Unit {
//这里我们将lambda匿名函数传给了gaoFun
gaoFun(false, { println("我是高阶函数") })
//因为gaoFun函数的最后一个参数是Lambda,所以我们可以将lambda匿名函数放在小括号的后面
gaoFun(true) { println("我也可以放在这里") }
/**
* 这里我声明了一个Runnable匿名内部类,然后将匿名内部类的run匿名函数赋值给了lambda
*/
val runnable = Runnable {
println("我是一个Runnable,我在被copy的时候就会运行")
}
val lambda: () -> Unit
lambda = runnable::run
gaoFun(true, lambda)
}
4、inline关键字
这个关键字用于函数声明,表示这个函数的内联的,它的作用就是编译器在编译时会对这种函数进行优化,从而减少函数对象的声明,减少空间的浪费。
- 注意:过多的使用inline关键字会对编译器造成很大的性能压力,所以我们建议只在高阶函数中使用inline关键字
那么,inline如何优化高阶函数呢,如下:
4.1 未编译前的代码
//没有inline关键字修饰的函数
fun gaoFun1(isSay: Boolean, lambda: () -> Unit) {
if (isSay) {
lambda()
}
}
//有inline关键字修饰的函数
inline fun gaoFun2(isSay: Boolean, lambda: () -> Unit) {
if (isSay) {
lambda()
}
}
fun main() {
gaoFun1(true) { println("lambda运行输出") }
gaoFun2(true) { println("inline关键字函数") }
}
4.2、编译后的代码
可以很明显的看到,没有inline关键字修饰的gaoFun1()在main函数是直接被调用的,但是被inline修饰的gaoFun2()函数被直接抛弃,直接将它的逻辑移到了main函数中运行。从而减少调用函数带来的一些消耗。
public final class TestMain1Kt {
public static final void gaoFun1(boolean isSay, @NotNull Function0 lambda) {
Intrinsics.checkParameterIsNotNull(lambda, "lambda");
if (isSay) {
lambda.invoke();
}
}
public static final void gaoFun2(boolean isSay, @NotNull Function0 lambda) {
int $i$f$gaoFun2 = 0;
Intrinsics.checkParameterIsNotNull(lambda, "lambda");
if (isSay) {
lambda.invoke();
}
}
public static final void main() {
gaoFun1(true, (Function0)null.INSTANCE);
boolean isSay$iv = true;
int $i$f$gaoFun2 = false;
int var2 = false;
String var3 = "inline关键字函数";
boolean var4 = false;
System.out.println(var3);
}
// $FF: synthetic method
public static void main(String[] var0) {
main();
}
}
5、如何在AndroidStudio中查看kotlin编译后的class源码
第一步:选择你要查看你的kotlin文件,然后点击Tools-->Kotlin-->Show Kotlin Bytecode
第二步:点击左上角的 Decompile 按钮就会弹出你想要的class源码
来源:CSDN
作者:我要看一下山顶的风景
链接:https://blog.csdn.net/qq_34589749/article/details/103474004