Lambda 表达式是 Java8 的新特性。
利用这个特性,可以使我们创建匿名内部类的对象时,代码简洁。
而且写出更加简洁美观的代码是当今的潮流。
新特性的加入能火起来,原因无非是有好处,比如比以前更加简单实用。
函数式接口
在 java8 中接口可以定义默认方法,而函数式接口规定该接口只能有一个抽象方法,比如:
@FunctionalInterface
interface Foo{
/*
函数式接口只能有一个方法!只有函数式接口才能用lambda表达式
一个接口只有一个方法,隐式(自动加)@FunctionalInterface
public void sayHello();*/
public int add(int x, int y);
//java8可以在接口内定义默认方法,且不影响函数式接口
public default int mul(int x, int y){
return x * y;
}
}
其中@FunctionalInterface
注解可加可不加,Java8 默认会为只有一个抽象方法的接口加上该注解。
创建匿名内部类的对象
传统方法:
Foo foo = new Foo() {
@Override
public void add(int x, int y) {
System.out.println("come in add method");
return x + y;
}
};
使用 lambda 表达式:
Foo foo = (int x, int y) -> {
System.out.println("come in add method");
return x + y;
};
可以看到使用 lambda 表达式时,由于只有一个方法,所以不用关心方法名,只需要关系方法的传入参数、业务逻辑和回返回值,就可以快速创建该对象。
最常用的地方是创建线程。Runnable
接口只有一个方法,所以使用Thread t1 = new Thread(() -> {//业务逻辑},threadName).start();
可以快速创建一个处于runnable
状态的线程。