您好,我是湘王,這是我的博客園,歡迎您來,歡迎您再來~
從之前的Lambda運算式的演變程序可以知道,Lambda運算式其實是一個對匿名內部類的簡化程序:去掉了多余的語法修飾,只保留最最核心的部分,在Java中類似這種使用匿名內部類寫代碼的場景非常多,比如Runnable介面,就是典型的最好使用Lambda運算式的地方,例如這樣的代碼:

可以清除地看到代碼的簡化程序,
所以Lambda運算式的特點在于:
1、匿名:像匿名函式一樣,沒有名字,只有代碼塊
2、函式:基于介面函式執行,而不是類
3、行為:傳遞行為,而非封裝代碼
很多剛開始學習Lambda運算式的人之所以覺得比較難適應,是因為沒有弄明白完整的匿名函式是如何進行簡化的這個程序,我個人的學習經驗是,只要腦子里時時記著:Lambda是對匿名函式的簡化,就會容易理解一些了,
Java8除了將匿名內部類改造成了Lambda運算式之外,還提供了一個注解,叫做@FunctionalInterface,它專門用來自定義需要的函式式介面,例如:

它可以這么來用:
FruitInterface face = (t) -> System.out.println("這是自定義的函式式編程介面");
省略了實體化的類名、省略了方法名、省略了引數型別,只顯示方法的引數和方法體,自然過渡到Lambda運算式的建議:

這是Java提供的注解,除了這個注解以外,為了方便碼農開發,Java也預定義了一堆可以直接拿來就用的函式式介面,常用的都列到這個表里了:

什么是供給型呢?意思就是沒有消費卻能提供輸出(消費指的是有沒有引數),例如之前說的Runnable就是一個供給型介面,可以簡化成:
() -> System.out.println("這是run()方法里面的列印陳述句");
再比如預測型,可能是:

所以,先把Java預定義的函式式介面弄熟也是一個不錯的開始,
之所以花這么多篇幅來說Lambda運算式和函式式介面,是因為這玩意確實是比較難理解,不管對于剛入門的新手,還是有了一些開發經驗的老手,都是如此,所以,新人不必覺得為啥自己學不會,不止是新人,很多有多年開發經驗的人都容易卡在這里,這也是我為啥寧可多花點篇幅反復啰嗦的原因,
至于方法參考和構造器參考,并不是什么高大上的技術,只要把Lambda運算式和函式式編程的底層原理搞懂了,那玩意分分鐘學會,
感謝您的大駕光臨!咨詢技術、產品、運營和管理相關問題,請關注后留言,歡迎騷擾,不勝榮幸~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/526947.html
標籤:Java
