Skip to content

Latest commit

 

History

History
53 lines (35 loc) · 1.94 KB

10.Java8之Lambda表达式.md

File metadata and controls

53 lines (35 loc) · 1.94 KB

#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接口

目标类型和参数类型推断

参考资料