lambda表达式
在java1.8中,更新了很多特性,其中最常用的要属于lambda表达式,但是首次接触lambda表达式的人可能对于lambda的语法可能会很疑惑或者不知道怎么去编写一个lambda表达式,这次就和大家分享一下关于个人在工作中使用lambda表达式的一些个人经验。
Talk is cheap, show me the code
以前的写法:
interface Tools{
void toDo(String thing);
}
public class Demo {
public static void main(String[] str){
Tools tool = new Tools() {
@Override
public void toDo(String thing) {
System.out.printf("to do %s", thing);
}
};
tool.toDo("some thing");
}
}
使用lambda表达式后的写法:
interface Tools{
void toDo(String thing);
}
public class Demo {
public static void main(String[] args) {
Tools tool = thing -> System.out.printf("to do %s", thing);
tool.toDo("some thing");
}
}
其实上面两种方式都达到了同样的效果,通过上面两个例子的对比,其实我们可以发现lambda的本质就是替代了之前的匿名内部类,但是比较特殊的一点是lambda表达式只能针对只有一个抽象方法的接口【静态方法和默认方法不被包含在内】,也就是说接口中只允许有一个抽象方法,否则就无法使用lambda表达式,这是因为java内部针对于只有一个抽象方法的接口默认让其可以支持lambda表达式的写法,所以其实lambda表示式就是简化了我们在使用接口时,接口没有具体的实现类,而如果是自己创建一个实现类又有点重了,因此,使用lambda表达式可以让java在运行时自已给我们生成一个接口的实现类,让编程更加简化,习惯了lambda表达式之后,其实lambda的可读性也是很高的。
后记
lambda表达式究其本质,其实就是方法的引用的,或者说lambda表达式就是函数【java中叫做方法】。当然,任何语法都是一种不一样的表达方式,使用匿名内部类也好,使用lambda表达式也好,只要能解决问题,其实方法的形式并不重要。