“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
Android开发中如何引入Lambda表达式?
我们知道Android开发是用Java语言来编写的,而java语言从java8开始才引入了Lambda表达式。所以Android开发想要用Lambda表达式则必须用Java8编译。
AndroidStudio 引入Java8编译有两种方式:
第一种方式:利用外部库插件方式 github地址:https://github.com/evant/gradle-retrolambda
在project build.gradle里面引入插件路径
module里面的build.gradle如下配置:
applyplugin:'com.android.application'//or apply plugin: 'java'
applyplugin:'me.tatarka.retrolambda'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
具体详情可以参考GitHub地址
第二种方式:直接在Module里面的build.gralde配置
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
如果你直接这样运行,编译会报如下错误
Error:Jack is required to support java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8.
这时候就要引入AndroidStudio的Jack编译啦。
在 defaultConfig {
...
jackOptions{
enabled:true
}
}
这时候就引入了jack编译啦。需要了解Jack编译请自行查阅官方文档
https://developer.android.com/guide/platform/j8-jack.html
个人更喜欢第一种方式:因为引入Jack编译会有各种巨坑
Lambda书写:
没有使用Lambda的老方法:
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
System.out.println("Actiondetected");
}
});
引入了Lambda写法:
button.addActionListener(()->{
System.out.println("Actiondetected");
});
这时候你会发现代码简洁多了