网站建设兆金手指花总,短链接生成器原理,广州广告网站建设,南京网站建设培训Kotlin Lambda
在探索Kotlin Lambda之前#xff0c;我们先回顾下Java中的Lambda表达式#xff0c;Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能#xff0c;它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口我们先回顾下Java中的Lambda表达式Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口尤其是函数式接口的方法。它的主要作用是简化代码、减少冗长的匿名类实现并使得代码更加灵活。 先看一段代码
Runnable runnable new Runnable() {Overridepublic void run() {System.out.println(Hello Java);}
};等效为
Runnable runnable () - System.out.println(Hello Java);带参数的和带返回值的其实是类似的只要满足函数式接口都可以使用lambda表达式简化代码这里就不做过多的介绍了。
Kotlin高阶函数
在了解Kotlin Lambda之前我们要先了解Kotlin的高阶函数高阶函数是指满足以下条件之一的函数
将函数作为参数传递。返回一个函数作为结果。
//函数作为参数
fun a(b: () - Int) {b.invoke()
}
//函数作为返回结果
fun c(x: Int): (Int) - Int {return { number - number * x }
}fun main() {val multiplier c(2)println(multiplier(2))
}函数引用
在Kotlin中可以使用::对函数进行引用并且还可以直接引用类似于集合中易经定义的函数可以简化代码
//函数引用
fun d(b: (Int) - Int): Int {return b.invoke(1)
}fun e(parma: Int): Int {return parma
}val f ::e
val h d(::e)注意::对函数进行引用之后实则是创建了一个对象并不是函数本身定义的函数无法调用invoke方法而函数对象可以
val m f(1)// 等同于f.invoke(1)
val l (::e)(1) //等同于(::e).invoke(1)匿名函数
匿名函数也称为lambda 函数是一种没有名称的函数。它们通常用于作为函数参数传递给其他函数或者简化某些操作。Kotlin 提供了两种主要的匿名函数写法Lambda 表达式和匿名函数。
Lambda表达式是一种简洁的匿名函数写法常用于高阶函数中。
val lambda { parma: Int - { parma * parma } }匿名函数和 Lambda 表达式非常相似但它们有一些不同的地方特别是在返回类型和参数类型推断方面。匿名函数可以显式地指定返回类型和参数类型且它允许在函数体内使用 return 语句来返回结果。
val a fun(parma: Int): String {return parma.toString()
}注意lambda不能使用return进行返回操作而匿名函数可以
Kotlin Lambda
在Java中我们设置函数式接口类型的对象通常使用匿名内部类或者lambda表达式
private OnClickListener mListener;interface OnClickListener {void onClick(int value);
}public void setOnClickListener(OnClickListener listener) {this.mListener listener;
}//匿名内部类
setOnClickListener(new OnClickListener() {Overridepublic void onClick(int value) {}
});
//lambda
setOnClickListener(value - {});在Kotlin中lambda表达式变得更加简洁和方便
interface Listener {fun onClick(value: Int)
}fun setListener(listener: Listener) {}
//kotlin可以将setListener方法参数传对象改为高阶函数
fun setListener2(onClick: (Int) - Unit) {}fun test() {//参数接收对象setListener(object : Listener {override fun onClick(value: Int) {println(value)}})//接收一个匿名函数setListener2(fun(value: Int): Unit {println(value)})//匿名函数可以替换为Lambda表达式setListener2({ value - println(value) })//若接受的函数是参数列表的最后一个参数可以写在括号外面setListener2(){ value - println(value) }//若匿名函数只有一个参数可以省略kotlin会用it代替它setListener2 { println(it) }
}最终我们看到了Kotlin Lambda表达式较为简洁的写法。kotlin lambda表达式在声明时已经指定参数类型因此参数类型可以不写而返回值永远取最后一行代码的执行结果因此也不需要指定返回值。Kotlin 匿名函数和Lambda的本质是函数类型的对象和::是同样的效果而Java 8中的Lambda只是一种简洁的写法。