问题引入
今天在学习过程中写了这样一段代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20interface Game { boolean move(); }
interface GameFactory { Game getGame(); }
class Checkers implements Game {
private int moves = 0;
private static final int MOVES =3;
@Override
public boolean move() {
System.out.println("Checkers move " + moves);
return ++moves != MOVES;
}
public static GameFactory factory = new GameFactory() {
@Override
public Game getGame() {
return new Checkers();
}
};
}
此时编译器在new GameFactory()
处提醒 Anonymous new GameFactory() can be replaced with lambda。点击后整个方法块被public static GameFactory factory = () -> new Checkers();
所替代,这就是lambda表达式。
Lambda表达式
Lambda表达式,也可称为闭包,它是推动Java 8 发布的最重要新特性。
Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda表达式可以是代码变的更加简洁紧凑。
语法
Lambda表达式的语法格式如下:1
2
3(parameters) -> expression
或
(parameters) ->{ statements; }
根据语法回到之前的例子:public static GameFactory factory = () -> new Checkers();
表示的就是不需要参数,返回值为一个Checkers对象。