java 中的lambda表達式


  java8新發布特性,lambda是以簡短的代碼實現邏輯的形式,如 x-> x +1。下面看個例子來說明表達式如何工作的,開啟一個線程並運行方法

  java8之前做法:

  new Thread(new Runable() {

    @Overide

    public void run() {

      System.out.println("run...");

    }

  }).start();

  java8之后做法:

  new Thread(() -> { System.out.println("run..."); }).start();

 

  由上可看出,lambda代碼要少很多,還很優雅,容易理解。

  lambda定義形式:

  (參數類型 x, 參數類型 y) -> { 業務代碼體 }  

 

  例:

  接口1:

  interface Test {

    int run(int x, int y); 

  } 

  

  class TestCC {

    static void exec(Test test) {

      test.run(10, 30);

    }

  }

  TestCC.exec((int x, int y) -> x + y); // 如果只有一行,則不需要{ } ,里面執行的結果就是返回值。也可以不用寫參數類型,直接寫x, y。如果無任何參數則()即可。如果有多行代碼體,則用 {}括起來,並用return 返回值。

  以上代碼編譯器會自動找到Test的run方法進行匹配實現,如果接口中有多個方法,則編譯器會報錯,因為表達式不知道匹配哪個方法,除非使用default。

  

  表達式優點:代碼簡潔,美觀,優雅。

  表達式缺點:接口必須只有一個非default方法;定義了一個方法,以后就不能擴展接口方法,不然在客戶端調用的所有表達式都會出錯,所以這只能適用於接口方法非常固定的情況下,我建議還是寫多點代碼增加靈活性。而C#則無此問題,因為C#不是用接口實現,是用委托實現,委托只對應一種類型方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM