Lambda是java8推出的新特性,這篇文章主要是針對Android來進行基本的應用。
1. 目的:爲了美觀 看着符合邏輯 書寫方便。
2. 環境配置:由於Android不支持java8,因此咱們採用RetroLambda庫兼容java8之前的版本
庫的地址在
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.