java8新发布特性,lambda是以简短的代码实现逻辑的形式,如 x-> x +1。下面看个例子来说明表达式如何工作的,开启一个线程并运行方法
java8之前做法:
new Thread(new Runable() {
@Overide
public void run() {
System.out.println("run...");
}
}).start();
java8之后做法:
new Thread(() -> { System.out.println("run..."); }).start();
由上可看出,lambda代码要少很多,还很优雅,容易理解。
lambda定义形式:
(参数类型 x, 参数类型 y) -> { 业务代码体 }
例:
接口1:
interface Test {
int run(int x, int y);
}
class TestCC {
static void exec(Test test) {
test.run(10, 30);
}
}
TestCC.exec((int x, int y) -> x + y); // 如果只有一行,则不需要{ } ,里面执行的结果就是返回值。也可以不用写参数类型,直接写x, y。如果无任何参数则()即可。如果有多行代码体,则用 {}括起来,并用return 返回值。
以上代码编译器会自动找到Test的run方法进行匹配实现,如果接口中有多个方法,则编译器会报错,因为表达式不知道匹配哪个方法,除非使用default。
表达式优点:代码简洁,美观,优雅。
表达式缺点:接口必须只有一个非default方法;定义了一个方法,以后就不能扩展接口方法,不然在客户端调用的所有表达式都会出错,所以这只能适用于接口方法非常固定的情况下,我建议还是写多点代码增加灵活性。而C#则无此问题,因为C#不是用接口实现,是用委托实现,委托只对应一种类型方法。
