使用 Lambda 取代 Android 中的匿名类
lambda是第十一个希腊字母,大写λ,小写λ,额,跑题了…lambda表达式 是java8的新特性之一:
- lambda表达式
- 函数式接口
- 流api
- 默认方法
- 新的date
- time api
lambda表达式 取代了匿名类 ,取消了模板,允许用函数式风格编写代码。
由于最近接触了rxjava,遇到了lambda,立马就喜欢上了~所以就学习了一下.
本文主要介绍一下lambda在android中替代匿名类的部分使用场景.
在android中使用lambda
gradle-retrolambda
a gradle plugin for getting java lambda support in java 6, 7 and android
在android中使用我们需要使用这个插件,按照配置配置完就行.
实战使用
由于lambda 可以取代匿名类,所以我们先来挑几个匿名类练练手.
这里先简单的提及一下lambda的语法:() -> {}咋一看可能觉得这个什么鬼啊?看不懂啊!
不急,看几个例子先~
设置监听事件
android中我们设置监听一般这么写:
mfab.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { dosomething(); } });
这么写as会提示说匿名类new view.onclicklistener()能被lambda代替:
提示
那么用lambda可以如何写呢?
mfab.setonclicklistener(v->dosomething());
看到了么?
整个匿名内部类被v->dosomething()给代替了.
是不是非常简单?
ps: 本例子中的`v`代表onclick传递的参数v,参数不能省略,但是可以随意命名.
实现runnable
在android中我们起个线程一般这么写:
new thread(new runnable() { @override public void run() { dosomething(); } }).start();
而使用lambda表达式的话可以这么写:
new thread(() -> dosomething()).start();
另外实例化runnable成员变量也可以这么写:
runnable runnable = ()->dosomething();
看完这两个例子是否对lambda感兴趣了呢?后续我还会继续学习,有兴趣的请继续关注~