Android(安卓)Lambda表达式
16lz
2021-01-24
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); }}
更多相关文章
- Android歌词秀设计思路(1)SafetyTimer
- 保存/恢复Activity和Fragment状态的最佳实践(译)
- Android(安卓)View构造方法第三参数使用方法详解
- Android中定时执行任务的3种实现方法
- 《第一行代码:Android(第2版)》,作者郭霖
- Android(安卓)WebView那些坑之上传文件
- Android(安卓)进阶 教你打造 Android(安卓)中的 IOC 框架 【View
- 条件数据库Android:sqllite使用
- android中ListView异步加载图片时的图片错位问题解决方案