前言
最近项目中考虑使用Rxjava进行项目重构,而jdk1.8中新增的核心特性中的lambda表达式与其结合起来很完美,所以写了这篇文章,简单的介绍下AS中如何使用Lambda表达式.
lambda表达式取代了匿名内部类,取消了模板,允许用函数式风格编写代码,使代码可读性更高,也更简洁,详细介绍请参考
java8 简明介绍
如何在AS中配置lambda?
(1)引入retrolambda插件
(2)应用插件retrolambda
(3)从 maven central 获取最新版本插件
(4)指定java版本8
至此配置完成,下一步就可以在AS中使用了。
1.用lambda表达式实现OnClickListener
Button button = (Button) findViewById(R.id.bt_test1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "hello eooooo", Toast.LENGTH_SHORT).show();
}
});
转化为如下的写法:
button.setOnClickListener(v -> Toast.makeText(MainActivity.this, "hello eooooo", Toast.LENGTH_SHORT).show());
2.用lambda表达式实现Runnable
new Thread(new Runnable() {
@Override
public void run() {
Log.e("aaa","bbbbb");
}
}).start();
转变为
new Thread(()->Log.e("aaa","bbbbb")).start();
3.Java 8 允许你通过::关键字获取方法或者构造函数的的引用。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public interface PersonFactory <P extends Person> {
P create(String firstName, int age);
}
private void test3(){
PersonFactory<Person> personFactory = Person::new;
Person person = personFactory.create("tom",15);
Log.e("person:",person.getName()+"::"+person.getAge());
}
我们通过Person::new来创建一个Person类构造函数的引用。Java编译器会自动地选择合适的构造函数来匹配PersonFactory.create函数的签名,并选择正确的构造函数形式。
更多用法可以查看