Android Lambda表达式
Lambda 希腊字母 “λ” 的英文名称,在java8中出现Lambda表达式,可以让代码更简洁,语法样式为:参数 -> 表达式; 为什么要去学习Lambda,因为在rxJava中有很多这样的表达式;在Android中有哪些应用场景比较合适呢。
应用场景
在使用过程中,不建议在自定义接口中使用,原因是因为Lambda
常应用在只有一个方法的接口中。而我们自定义的接口,后期可能会增加接口中的方法,这样修改的地方就比较多,因为Lambda
不支持多个方法的接口,AndroidStudio
也并没有在多个实现方法时提示要使用Lambda
; 所以Lambda
在Android中的常用场景应该为:
- 点击事件:OnClick
- 新建线程:new Thread
- runOnUiThread
等等
eg:
常规操作
button.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View v){
doSomeWork();
}
});
lambda
button.setOnClickListener(
(View v) -> {
doSomeWork();
}
);
Lambda 的操作
语法
( 参数列表... ) -> { 语句块... }
用自定义的接口当栗子
MainActivity
public class MainActivity extends AppCompatActivity {
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 无参无返回值
new Test(new Test.Callback() {
@Override
public void success() {
Log.e(TAG, "无参无返回值");
}
});
new Test(() -> Log.e(TAG, "无参无返回值"));
// 有参无返回值
new Test(new Test.Callback1() {
@Override
public void success(String msg) {
Log.e(TAG, "有参无返回值");
}
});
new Test((String msg) -> Log.e(TAG, "有参无返回值"));
//无参有返回值
new Test(new Test.Callback2() {
@Override
public String success() {
return "无参有返回值";
}
});
new Test(() -> "无参有返回值");
//有参有返回值
new Test(new Test.Callback3() {
@Override
public String success(String msg) {
return msg + "的回调";
}
});
new Test((String msg) -> msg + "的回调");
}
}
Test
public class Test {
private final String TAG = "Test";
// 无参无返回值
public Test(Callback callback) {
callback.success();
}
public interface Callback {
void success();
}
// 有参无返回值
public Test(Callback1 callback) {
callback.success("有参无返回值");
}
public interface Callback1 {
void success(String msg);
}
//无参有返回值
public Test(Callback2 callback) {
String msg = callback.success();
Log.e(TAG, msg);
}
public interface Callback2 {
String success();
}
//有参有返回值
public Test(Callback3 callback) {
String msg = callback.success("有参有返回值");
Log.e(TAG, msg);
}
public interface Callback3 {
String success(String msg);
}
}