1. 程式人生 > >Java:匿名內部類和Lambda表示式

Java:匿名內部類和Lambda表示式

在JDK8之前,將行為抽象化作為引數傳遞給某個物件方法並進行回撥,需要定義一個實現相關介面的型別,如果該型別只需要使用一次,則可通過匿名內部類實現。

在借鑑了C#和Scala後,JDK8引入Lambda表示式,通過減少不必要的模版程式碼,簡化了傳遞抽象化行為程式碼的方式。

比如: 

Runnable objInnerClass = new Runnable(){
    public void run(){
        System.out.println("Hello objInnerClass");
    }
};
Runnable objLambda = () -> System.out.println("Hello objLambda");
new Thread(objInnerClass).start();
new Thread(objLambda).start();
//還可以使用如下形式
new Thread(new Runnable(){
               public void run(){System.out.println("Hello objInnerClass");}
          }).start();
new Thread(() -> System.out.println("Hello objLambda")).start();

上述程式碼分別例項化了兩個Runnable物件,其中objInnerClass引用匿名內部類方式例項化的Runnable物件,objLambda引用Lambda表示式例項化的Runnable物件,並分別傳遞給Thread建構函式,例項化Thread物件,再呼叫start方法啟動執行緒執行。通過多執行緒編碼場景,我們可以一目瞭然的看出,JDK8引入的Lambda表示式語法減少了匿名內部類中的模板程式碼,簡化了開發者的程式碼編寫,且程式碼的可讀性更好。而Lambda表示式的使用,正是函數語言程式設計的體現。我們應該循著JDK的不斷演變,將JDK8的Lambda表示式引入我們的程式碼,將函數語言程式設計引入我們的思維,從而更好的改善我們的程式碼質量。