JavaSE8新特性——lambda表示式1
阿新 • • 發佈:2019-02-09
- 廣義上,帶有引數變數的表示式都被稱為lambda表示式。java中lambda表示式是一段可以傳遞的程式碼。它可能不會被立即執行。
- java中類似lambda程式碼塊的常見方式:
- 執行緒的run程式碼塊
- 比較器比較方法程式碼塊
- 回撥 ex:按鈕的點選事件回撥程式碼塊
- 原來的程式碼塊實現方法比較臃腫,而且lambda表示式是當前比較時髦的函數語言程式設計語言的特性
- lambda表示式的格式:
- (param1,param2) -> {dowork();}
- param的物件型別一般不用宣告。param可空。
- 當有返回值而程式碼塊只有一個簡單語句時,可以不明確使用return,編譯器會使用該簡單語句的返回值作為返回值,可見條目6的程式碼
- lambda表示式使用場景:需要一個單一方法的介面的實現類的物件。
- 下面的程式碼定義了一個Runnable的物件,可以對比傳統實現方法
- Runnable printer = () -> {System.out.println(“from lambda”);};
如果表示式已經被實現過,不需要自己再重複實現:
interface GetMax{ int getTheMax(int a,int b); } //要實現上述介面的一個物件如下 GetMax getter = Math::max; //等同於 GetMax getter2 = (x, y) -> {return Math.max(x, y);}; //省略return GetMax getter3 = (x, y) -> Math.max(x, y);
- 可以使用的情況包括:物件的例項方法,類的靜態方法,類的例項方法(eclipse4.4編譯不通過)。
lambda表示式可以直接使用lambda表示式外面的區域性變數,但是不能對其進行修改。
public static void repeatMessage(String text, int count) { Runnable r = () -> { System.out.println(text);//正常 count++;//報錯 }; new Thread(r).start(); }