1. 程式人生 > >JavaSE8新特性——lambda表示式1

JavaSE8新特性——lambda表示式1

  1. 廣義上,帶有引數變數的表示式都被稱為lambda表示式。java中lambda表示式是一段可以傳遞的程式碼。它可能不會被立即執行。
  2. java中類似lambda程式碼塊的常見方式:
    • 執行緒的run程式碼塊
    • 比較器比較方法程式碼塊
    • 回撥 ex:按鈕的點選事件回撥程式碼塊
  3. 原來的程式碼塊實現方法比較臃腫,而且lambda表示式是當前比較時髦的函數語言程式設計語言的特性
  4. lambda表示式的格式:
    • (param1,param2) -> {dowork();}
    • param的物件型別一般不用宣告。param可空。
    • 當有返回值而程式碼塊只有一個簡單語句時,可以不明確使用return,編譯器會使用該簡單語句的返回值作為返回值,可見條目6的程式碼
  5. lambda表示式使用場景:需要一個單一方法的介面的實現類的物件。
    • 下面的程式碼定義了一個Runnable的物件,可以對比傳統實現方法
    • Runnable printer = () -> {System.out.println(“from lambda”);};
  6. 如果表示式已經被實現過,不需要自己再重複實現:

    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編譯不通過)。
  7. lambda表示式可以直接使用lambda表示式外面的區域性變數,但是不能對其進行修改。

    public static void repeatMessage(String text, int count) {
        Runnable r = () -> {
            System.out.println(text);//正常
            count++;//報錯
        };
        new Thread(r).start();
    }