Java:匿名內部類和Lambda表示式
阿新 • • 發佈:2018-12-26
在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表示式引入我們的程式碼,將函數語言程式設計引入我們的思維,從而更好的改善我們的程式碼質量。