引入Lambda
2016-11-03 本文已影响71人
CokeNello
1.参考
2.简介
Lambda是为了使你的代码简洁!
由传统的OnClick写法:
button.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {}
});
使用Lambda语法后:
button.setOnClickListener(v -> {});
3.用法:
其有多种形式,主要是由传入参数,和主体代码(就是{}里面代码是不是只有一行)所决定!
-
不包含参数,并且返回值为void
new Thread(()->{}).start();
-
一个参数,并且主体为一个表达式
button.setOnClickListener(v -> Log.d("tag", "click"));
当然,你写成:button.setOnClickListener(v -> {Log.d("tag", "click")});
也是可以的,不过前者比较简洁。 -
一个参数,并且主体为一段代码块。这时候必须用大活好。
button.setOnClickListener(v -> {
Log.d("tag", "click");
Log.d("tag", "click");
}
});
- 多个参数的方法,你既可以显示声明变量参数类型,也可以啥都不写依靠编译器推断得出。如果显示声明,那么就需要用括号将参数括起来
listview.setOnitemClickListener((parent, view, position, id) -> {})
或者:
listview.setOnitemClickListener((AdapterView<?> parent, View view, int position, long id) -> {})
4.函数式接口
函数接口是只有一个抽象方法的接口,这点一定要搞清楚,只有符合上述条件,才可以用作Lambda表达式类型,2个3个抽象方法的接口是不能玩的,感觉这玩意就是为了Lambda而生的,也可能是反过来吧,哈哈。
5.最后,Android Studio怎么支持JDK8?
现在Android Studio还没支持JDK8,目前只能酱紫做去支持:
导入详情:点我!
-
Download and install jdk8.
-
Add the following to your project’s main build.gradle(也就是在你的Project下的build.grale)
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.2.3'
}
}
- Now add this to your application module’s build.gradle(在模块的build.gradle,每个模块都要,包括app模块。)
apply plugin: 'com.android.application' // or apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'
- Add these lines to your application module’s build.gradle to inform the IDE of the language level:(在app模块下)
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}