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表达式在Android中的应用_第1张图片

我们可以改写成这样

这里写图片描述

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

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

Lambda表达式在Android中的应用_第2张图片

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

Lambda表达式在Android中的应用_第3张图片

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

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

Lambda表达式在Android中的应用_第4张图片

经过上面的试验

然后说下其他基本用法

无参数无返回值

v->{
Log.e("TAG".v+"");
}
v输出的就是这个匿名类对象

有参数无返回值

(x,y)->{
Log.e("TAG",x+y+"");
}

有参数有返回值

(x,y)->{
return x+y;
}

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

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

你可能感兴趣的:(Android开发)