AS用lamda表达式制作一个简单的butoon事件

lamda出来很久了最近老师说用lamda表达式来做一个Button的按钮事件,初略的将自己的做法和感想分享给大家
先说 AS 如何支持 Lambda 表达式
1.首先确定你的AndroidStudio中使用的是大于jdk1.8的版本在这里插入图片描述
2、在项目的根路径 build.gradle 文件中添加 Lambda 的脚本下载路径,也就是 classpath
具体代码:classpath ‘me.tatarka:gradle-retrolambda:3.2.5’
在这里插入图片描述
3、在你的module目录下,通畅也就是 app 目录下的 build.gradle 下添加 java 编译版本号
具体代码:
这一行如果加上去有错误的话可以注释掉
apply plugin: ‘me.tatarka.retrolambda’在这里插入图片描述

这些加在android{…}里面
packagingOptions { //
exclude ‘META-INF/services/javax.annotation.processing.Processor’ //
} //这也是我加的
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8 //
targetCompatibility JavaVersion.VERSION_1_8 //这也是我加的
}
这些是加在android外面,和它属于同一节点//可加可不加
buildscript { //
repositories { //
mavenCentral() //
}

dependencies {
    classpath 'me.tatarka:gradle-retrolambda:2.5.0'         //
}

}
repositories { //
mavenCentral()
}
在这里插入图片描述
4.lamda和常规代码的区别
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn1.setText(“我是匿名内部类实现的”);
}
});
相比俩个代码lamda表达式简单明了省略很多麻烦(匿名类的书写啥的)

btn3.setOnClickListener(v->{

    btn3.setText("我是以LAMDA表达式的方法实现的");
});

}
5简单认识下 Lambda
最简单的说法,也是直指本质的是: Lambda 是 java 对方法中需要传入的 匿名实现类的简写。举个例子,我们给 button 注册一个点击事件,就是传入一个 View.ClickListener 对象。大伙都体验过在一个方法的参数中传入一个匿名实现类,一个还好,要是需要传入多个呢,那在查看时就是低于式体验了,太不友好了,这种体验类似于 callback 的回调地狱,Lambda 在函数式编程中应该叫 闭包 ,我们平时也叫 Lambda 表达式
Lambda 语法
Lambda 的语法是隐藏实现类的 类名 和 方法名,下面是基本写法
(parameters) -> { expression or statements }
左边括号内是方法需要传入的参数,右边括号内是方法实现逻辑
例子

// 无参数, 返回1+2的结果
() -> 1+2

// 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x

// 接收2个参数(数字),返回表达式运算的结果
(x, y) -> x + y

// 多个语句要用大括号包裹, 并且返回值要用return指明
(x, y) -> {
int result = x + y;
System.out.print(result);
return result;
}

// 接收string 对象, 并在控制台打印
s -> System.out.print(s)
其中参数的类型可以不声明, 编译器会结合上下文智能推断, 比如这句

s -> System.out.print(s)
等价于

(String s) -> System.out.print(s)
注意: 无参数时()不能省略
我再举几个 lambda 的应用场景:

单实现的接口
条目点击事件
封装网络请求的回调
与RxJava的链式调用

发布了3 篇原创文章 · 获赞 0 · 访问量 177

猜你喜欢

转载自blog.csdn.net/s56564/article/details/104458012