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 }