1. 程式人生 > 實用技巧 >Java 從匿名內部類到Lambda表示式

Java 從匿名內部類到Lambda表示式

匿名內部類和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(){public
void 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關鍵詞和{} 省略掉。