lambda表達式的簡單入門


  

  前言:本人在看《Java核心技術I》的時候對lamdba表達式還不是太上心,只是當做一個Java 8的特性了解一下而已,可是在《Java核心技術II》里面多次用到,所以重新入門來學。

 


   

  看教程說()->3就是直接輸出3這個數字,所以我這么寫:

  System.out.println(()->3);

  果不其然,報錯了,錯誤的提示是:The target type of this expression must be a functional interface.(該表達式的目標類型必須是功能性接口)。也就是時候再怎么不濟,最起碼接收這個表達式的變量類型也是一個功能性接口吧。本人是Java小白一個,不知道functional interface是什么,索性就直接拿個interface來寫了。

public class LambdaTest{
    interface Test{
        void sayMessage(String message);
    }
    public static void main(String[] args) {
        Test t = message->System.out.println(message);
        t.sayMessage("3");  //為什么不能是int類型的3呢?因為在接口里面就已經聲明了sayMessage方法的參數是一個String類型的變量。
    }
}

  以上一個很簡單的輸出語句。但是也要經過:創建接口->定義方法->實現方法這幾個步驟才能實現System.out.println()語句。

 

  那假設我想要用lambda表達式進行加法運算呢?可以直接用()->1+2得到嗎?答案是肯定不行啊!那可以直接用上面的代碼修改成message->1+2嗎?答案也是不行滴。為什么呢?請看報錯的信息先:Void methods cannot return a value。當初是你要void,void就void,現在又要用int,把value return回來 。

  那么重新改下代碼,改成這樣子:

  interface Test{
        int sayMessage(String message);
    }
    public static void main(String[] args) {
        Test t = message->1+2;
        System.out.println(t.sayMessage("1"));
    }

  會發現,打印出來的值是3,傳入的參數"1"沒有任何作用,那留着"String message"這個參數做什么呢?過年加菜嗎?所以可以改成:

 

  interface Test{
        int sayMessage();
    }
    public static void main(String[] args) {
        Test t = ()->1+2;  //此處不需要參數,因為lambda表達式中沒有參數。
        System.out.println(t.sayMessage());
    }

 

  結果依然是打印出3

 


免責聲明!

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



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