Lambda表达式在Android中的应用

Lambda

Lambda是java8推出的新特性,这篇文章主要是针对Android来进行基本的应用。

1. 目的:为了美观 看着符合逻辑 书写方便。

2. 环境配置:因为Android不支持java8,所以我们采用RetroLambda库兼容java8以前的版本

库的地址在

https://github.com/evant/gradle-retrolambda

AS中配置方法:

首先下载Java8,把语言等级设置为Java8

工程配置文件build.gradle下
buildscript {
  repositories {
     mavenCentral()
  }

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

// Required because retrolambda is on maven central
repositories {
  mavenCentral()
}
app项目配置文件build.gradle下:
apply plugin: 'com.android.application' //or apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'

3.使用到的语法:

“->”关键符号

以前我们要是Android设置一个Button的监听,可以用这种匿名内部类的方式

图片

我们可以改写成这样

这里写图片描述

也许你能感受到Lambda在这里的作用 就是替代匿名内部类。同样也会有一个疑问。为什么{}中的方法 恰好是onClick方法。 要是接口中有多个方法怎么办。我尝试了一下

建立了一个多方法的接口MutiMethod

这里写图片描述

在内部建立了一个Activity内部类,为了设置接口。

这里写图片描述

报错了,找不到抽象方法,一对多这种情况是不允许的,lambda这样只能用于单方法的接口。

另外,另一个小实验,在Acitivty onCreate方法中,直接用lambda表达式,我们本来的目的是想新建一个匿名类,但是这里的v代表谁,又对应着哪个接口,我们不曾得知。所以lambda表达式另一个关键点是必须有上下文。 根据上下文需要的类型得出。

这里写图片描述

经过上面的试验

然后说下其他基本用法

无参数无返回值
v->{
Log.e("TAG".v+"");
}
v输出的就是这个匿名类对象
有参数无返回值
(x,y)->{
Log.e("TAG",x+y+"");
}
有参数有返回值
(x,y)->{
return x+y;
}

注 :单行可以省略{},有返回值的时候不要加;结尾。无返回值加;

Lambda常见使用 主要是配合Rxjava进行流式的操作,我以后Rxjava的文章再提Lambda.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值