#10.Java8之Lambda表达式
Java 8最大的变化就是引入了Lambda表达式,它可以使臃肿Java代码变得更加简洁。
##10.1 第一个Lambda表达式
在Swing编程中,我们经常会见得到这样的代码:
Buttton button = new Button();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println("Button Click!");
}
});以上,除了1行和4行之外,其他都是”多余“的代码,现在我们使用Lambda表达式来实现:
Button button = new Button();
button.addActionListener(event -> System.out.println("Button Click!"));代码从6行变成了2行,而且更加简洁清晰易懂。这就是Lambda的魅力之一。
##10.2 Lambda表达式语法
lambda表达式分为三部分:
(参数列表) -> {语句或语句块}
- 参数列表:如10.1例子中的event,如果只有一个参数,可忽略__()__;
- ->: 用于区分参数列表与语句块部分;
- 语句或语句块:如10.1例子中的System.out.println("Button Click!")部分,如果只有一条语句,可忽了__{}__。
也许有些人会有疑问,为什么event -> System.out.println("Button Click!")能够代替之前的冗赘的写法呢?编译器怎么知道addActionListener的参数是ActionListener类型,以及要实现的actionPerformer方法呢?
这确实是个好问题,在完全解答这个问题之前,先在引入一个概念:函数式接口
函数式接口:简而言之,就是只包含一个抽象方法的接口。
例如10.1例子中的ActionListener接口