Lambda在Android中的应用

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

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

 

2. 环境配置:由于Android不支持java8,因此咱们采用RetroLambda库兼容java8之前的版本

 

 

库的地址在

 

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

AS中配置方法:

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

工程配置文件build.gradle下android

buildscript {
  repositories {
     mavenCentral()
  }

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

// Required because retrolambda is on maven central
repositories {
  mavenCentral()
}

app项目配置文件build.gradle下:git

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.

相关文章
相关标签/搜索