lambda表达式:
只定义了单个方法的接口,称为单一抽象方法(Single Abstract Method, SAM)接口;由于此接口通过调用,完成某一功能,所以也称为功能接口,此类接口的实例称为功能对象
lambda表达的作用是相当于一个函数,编译器把lambda表达式编译为一个对象,该对象是一个内部匿名类的实例,此匿名类实现了功能接口,只有一个方法,此方法的参数即为lambda表达式的参数,此方法的方法体即为lambda表达式的方法体
由上述可以推出如下结论:如果一个方法的参数是功能接口类型,可以用lambda表达式作为参数传给此方法
所以如果一个方法的接收参数为功能接口类型,可以通过如下三种方式传参数,其中接口上@FunctionInterface注释,表明该接口是一个功能接口
1 public void Run(){ 2 setAction(new InnerClass()); 3 4 setAction(new T1() { 5 @Override 6 public void test() { 7 System.out.println("匿名类方式"); 8 } 9 }); 10 11 setAction(() -> System.out.println("lambda表达式方式")); 12 } 13 14 public void setAction(T1 t1) { 15 t1.test(); 16 } 17 18 class InnerClass implements T1 { 19 @Override 20 public void test() { 21 System.out.println("内部类方式"); 22 } 23 } 24 25 @FunctionalInterface 26 interface T1 { 27 void test(); 28 }