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的监听,可以用这种匿名内部类的方式

android lambda 如何使用哦 安卓lambda_语言

我们可以改写成这样

android lambda 如何使用哦 安卓lambda_java_02

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

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

android lambda 如何使用哦 安卓lambda_java_03

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

android lambda 如何使用哦 安卓lambda_语言_04

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

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

android lambda 如何使用哦 安卓lambda_android_05

经过上面的试验

然后说下其他基本用法

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

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

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