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.

相關文章
相關標籤/搜索