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大括号里面的内容。
    1. 还会形成一个匿名内部类,实现接口,调用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("您好");
    }
}

上一篇下一篇

猜你喜欢

热点阅读