Lambda表达式原理
2022-08-24 本文已影响0人
flyjar
1、一个函数式接口
@FunctionalInterface
public interface UserService {
void show();
}
2、Lambda调用函数式接口
public class LambdaTest {
public static void main(String[] args) {
//此处就是lambda写法。调用lambdaMethod方法,而方法的参数是一个函数式接口。
//lambda实际就是调用一个方法,而方法的参数是一个函数式接口对象
lambdaMethod(() -> {
System.out.println("您好");
});
}
public static void lambdaMethod(UserService service) {
service.show();
}
}
3、Lambda表达式最终生成的代码(实际上生成代码并不是这个样子,但是逻辑是一样的) 程序运行时动态生成class
- 会生成一个静态方法lambda$main$0,这个方法区执行lambda大括号里面的内容。
- 还会形成一个匿名内部类,实现接口,调用lambda$main$0()方法
public class LambdaTest {
public static void main(String[] args) {
lambdaMethod(new UserService(){
@Override
public void show(){
LambdaTest.lambda$main$0();
}
});
}
public static void lambdaMethod(UserService service) {
service.show();
}
private static void lambda$main$0() {
System.out.println("您好");
}
}