Java 8 新特性系列 – Lambda表达式
Java8 终于引入了 Lambda 表达式,在此之前,传言会在 Java 7 中引入次功能。
1 什么是 Lambda
使用过 Python、C# 的应该对此不会陌生,百度百科对 Lambda 表达式的解释为:
Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
百度百科
由解释可以大致知道,Lambda 表达式基本上就是匿名函数的一种简单写法,相当于语法糖,使用 Lambda 可以有效的节省代码量。
1.1 基本语法
(parameters) ->{statements;}
1.2 示例
典型的一个示例就是线程的使用,不过为了演示参数,暂以 Android 中给按钮绑定事件的代码为例,Java8以前的写法:
button.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent actionEvent){ System.out.println("Action detected"); } });
使用 Lambda 的写法:
button.addActionListener((actionEvent)-> { System.out.println("Action detected"); });
可以看到,以前的写法,要先 new 一个 接口/类,然后在类中 override 未实现的方法,而新写法,省去了类名、方法名等内容,只留下了方法参数名、方法体。
2 限制与特殊情况
- 接口或者抽象类,有且仅有一个方法需要实现,才能使用Lambda
- 有且仅有一个参数,则参数外的小括号可省略
- 无返回值,且方法体只有一句话,则方法体的大括号可以省略,这句代码的分号要省略掉。
根据特殊情况,上个段落的代码最终可以简写为:
button.addActionListener(actionEvent-> System.out.println("Action detected"));