lambda表达式:ide
只定义了单个方法的接口,称为单一抽象方法(Single Abstract Method, SAM)接口;因为此接口经过调用,完成某一功能,因此也称为功能接口,此类接口的实例称为功能对象函数
lambda表达的做用是至关于一个函数,编译器把lambda表达式编译为一个对象,该对象是一个内部匿名类的实例,此匿名类实现了功能接口,只有一个方法,此方法的参数即为lambda表达式的参数,此方法的方法体即为lambda表达式的方法体spa
由上述能够推出以下结论:若是一个方法的参数是功能接口类型,能够用lambda表达式做为参数传给此方法code
因此若是一个方法的接收参数为功能接口类型,能够经过以下三种方式传参数,其中接口上@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 }