概述
在使用lambda表示式的時候,我們實際上傳遞進去的**就是一種解決辦法:拿什麼引數做什麼操作,那麼考慮一種情況:如果我們在lambda中所指定的操作方案,已經有地方存在相同的方案,那麼是否還有必要再重寫重複邏輯。
**演示
package day17;
public class demo01print
public static void main(string args) );
printstring(system.out::print);}/*
分析:lambda表示式的目的,列印引數傳遞的字串
把引數s,傳遞給了system.out物件,呼叫out物件中的方法println對字串進行了輸出
注意:1.system.out物件是已經存在的
2.println方法也是已經存在的
所以可以使用方法引用來優化lambda表示式
可以使用system.out方法直接引用(呼叫)println方法
*/}
方法引用符
雙冒號::為引用運算子,而它所在的表示式被稱為方法引用。如果lambda要表達的函式方法已經存在於某個方法的視線中,那麼則可以通過雙冒號來引用該方法作為lambda的替代者。
語義分析
例如概述裡面舉的例子,system.out物件中有乙個過載的println(string)方法恰好就是我們所需要的。那麼對於printstring方法的函式式介面引數,對比下面兩種寫法,完全等效:
lambda表示式寫法:s -> system.ouot.println(s);
方法引用寫法:system.out::println
第一種語義是指:拿到引數之後經lambda之手,繼而傳遞給system.out.println方法去處理。
第二鐘等效寫法的語義是指:直接讓system.out中的println方法來取代lambda。兩種寫法的執行效果完全一樣,而第二鐘方法引用的寫法服用了已有方案,更加簡潔。
注:lambda中,傳遞的引數一定是方法引用中的那個方法可以接受的型別,否則會丟擲異常、
推導與省略
如果使用lambda,那麼根據「可推導就是可省略」的原則,無需指定引數型別,也無需指定的過載形式--它們都將被自動推導。而如果使用方法引用,也是同樣可以根據上下文進行推導。
函式式介面是lambda的基礎,而方法引用是lambda的孿生兄弟。
Lambda表示式之方法引用
方法引用可以被看做僅僅呼叫特定方法的lambda的一種快捷寫法。它的基本思想是,如果乙個lambda代表的只是 直接呼叫這個方法 那最好還是用名稱來呼叫它,而不是去描述如何呼叫它。事實上,方法引用就是讓你根據已有的方法實現來建立lambda表示式。但是,顯式地指明方法的名稱,你的 可讀性會更好。方法...
三十 Lambda表示式 方法引用
實現方式二 實現方式三 演示 方式一的執行緒類 public class myrunnable implements runnable public class lambdademo start 方式三 newthread start 函式式程式設計思想概述 函式式思想則盡量忽略物件導向的複雜語法 ...
java方法引用替代lambda表示式
方法引用 當lambda表示式中僅僅呼叫乙個已經存在的方法時,我們就可以使用方法引用代替lambda表示式。這樣 可以讓程式進一步簡潔。方法引用分為以下四種 1 引用靜態方法 2 通過物件 引用 引用例項方法 3 通過型別引用例項方法 4 引用構造器 public class methodrefer...