java 8 中引入了一些有特色的功能,Lambda表达式是目前唯一可以兼容到低版本Android2.3的,所以学习下,可以在项目中写写更方便的写法。
首先需要在build中配置:
android {
compileSdkVersion 25
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.yuanli.myapplication"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//Lambda表达式需要
jackOptions.enabled = true
}
//Lambda表达式需要
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
使用
- 凡是只有一个待实现方法的接口,都可以使用Lambda表达式的写法。
线程写法:
//第一种
class ThreadOne extends Thread {
@Override
public void run() {
//处理逻辑
}
}
。。。。。。。。。。。。。。。。
new Thread(()->{
//处理逻辑
}).start();
================================================
//第二种
class ThreadTwo implements Runnable {
@Override
public void run() {
//处理逻辑
}
}
。。。。。。。。。。。。。。。。
Runnable runnable=()->{
//处理逻辑
};
- java可以根据上下文自动判断出Lambda表达式中参数类型
//自定义接口写法
public interface MyListenner {
String doSomething(String a, int b);
}
//接受MyListenner参数的方法
public void Hello(MyListenner myListenner) {
String a = "Hello Lambda";
int b = 1024;
String result = myListenner.doSomething(a, b);
Log.i(TAG, "Hello: " + result);
}
。。。。。。。。。。。。。。。。。。。
Hello((a, b) -> {
String result = a + b;
return result;
});
//接口的匿名实现方法
MyListenner myListenner = (a, b) -> {
String result = a + b;
return result;
};
- 点击事件写法
getView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
getView().setOnClickListener(v -> {
});