# 介绍
Lambda表达式的出现解决了内部类代码过于冗余的问题,并且为了Lambda表达式的使用方便,从JDK1.8
开始,支持方法内内部类可以直接访问方法参数
Lambda是一种函数式编程
# 问题
没有Lambda表达式前的匿名内部类,匿名类的核心语句只有一行,但是不得不编写其他冗余的代码
interface MessageI {
public void send(String msg);
}
public static void main(String[] args) {
MessageI myMsg = new MessageI() {
public void send(String msg) {
System.out.println(msg);
}
}
myMsg.send("Hello");
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 使用Lambda表达式
public static void main(String[] args) {
MessageI myMsg = (msg) -> {
System.out.println(msg);
};
myMsg.send("Hello");
}
1
2
3
4
5
6
2
3
4
5
6
# Lambda表达式使用
1. 编写多行语句
(n1, n2) -> {
int n3 = n1 + n2;
n3 = n3 + 1;
return n3;
};
1
2
3
4
5
2
3
4
5
2. 编写单行返回语句
(n1, n2) -> n1 + n2;
1
注意
使用函数式编程的前提,一个接口只允许有一个抽象方法
如果出现其他方法,只能是default
或者static
方法
可以使用注解@FunctionalInterface
防止定义多个抽象方法
@FunctionalInterface
interface MessageI {
public void send(String msg);
}
1
2
3
4
2
3
4