Java 從匿名內部類到Lambda表示式
阿新 • • 發佈:2020-12-07
匿名內部類和Lambda表示式有很多類似之處,首先都是在使用的時候才對介面進行實現,只是Lambda介面中只能由一個需要被實現的方法。
所有的Lambda表示式都可以 由匿名內部類改寫:
interface Face1{ //無引數無返回值 public void face(); } interface Face2{ //有一個引數無返回值 public void face(int a); } interface Face3{ //有一個引數,有一個返回值 int face(int a); } interface Face4{ //有兩個引數,有一個返回值int face(int a,int b); } public class Test { public static void main (String[] args) throws java.lang.Exception { // 匿名內部類 實現介面 Face1 fn1=new Face1(){public void face(){System.out.println("匿名內部類 fn1");}}; fn1.face(); Face2 fn2=new Face2(){publicvoid face(int a){System.out.println("匿名內部類 fn2 "+a);}}; fn2.face(10); Face3 fn3=new Face3(){public int face(int a){return a*a;}}; System.out.println("匿名內部類 fn3 :"+fn3.face(10)); Face4 fn4=new Face4(){public int face(int a,int b){return a+b;}}; System.out.println("匿名內部類 fn4 :"+fn4.face(10,9)); // Lambda表示式 實現介面 Face1 fl1=()->{System.out.println("Lambda表示式 fl1");}; fl1.face(); Face2 fl2=(a)->{System.out.println("Lambda表示式 fl2:"+a);}; fl2.face(10); Face3 fl3=(a)->{return a*a ;}; System.out.println("Lambda表示式 fl3:"+fl3.face(10)); Face4 fl4=(a,b)->a+b; System.out.println("Lambda表示式 fl4:"+fl4.face(10,9)); } }
執行結果:
匿名內部類 fn1
匿名內部類 fn2 10
匿名內部類 fn3 :100
匿名內部類 fn4 :19
Lambda表示式 fl1
Lambda表示式 fl2:10
Lambda表示式 fl3:100
Lambda表示式 fl4:19
Lambda表示式 在一定程度上是在匿名內部類的基礎上進行程式碼簡化(但是編譯的方式不同):
Lambda的形式如: (引數)->{方法體}
1、當只有一個引數的時候可以把() 省略掉。
2、當方法體只有一條語句的時候 可以把 return關鍵詞和{} 省略掉。