一.方法的分析
首先我們看下面的乙個例子:
publicclass
methodrefrence
public
static
void
staticexec()
}@test
public
void
test1()
}
在上面的**之中,最為奇怪的就是我們的乙個例項方法之中的第乙個引數是this.
其實這個this就是例項方法和靜態方法最大區別了,乙個例項方法之中,在編譯的時候,會自動傳入乙個this的引數,引數的型別就是本類的型別.
再了解了上述的事實之後,我們來看一下方法的引用.
二 方法引用
如果我們抽象了乙個方法之後,我們發現這個方法本身就是乙個lambda表示式.
因為它的基本結構就是引數列表和返回值,其中的方法體對應了lambda之中的**體.
我們知道乙個方法在j**a之中答題可以分成下面的三種:
[1]靜態方法
[2]例項方法
[3]構造方法
在下面我們來分別看上述的三種方法的方法引用的使用.
三. 靜態方法的引用
publicclass
staticclass
public
static
void
main(string args)
}
在上面的**之中,我們最關注的就是 '::' 這個符號,這個符號出現在j**a8之中,代表的就是乙個方法引用,其實方法引用也是乙個lambda.
還記得之前我們寫過類似的**嗎?
從這裡我們看到,乙個函式之中,我們最為關注的就是引數列表和返回值,方法體就是邏輯單元.
這樣的結構就是lambda的基本形式.
在這裡我們展示的就是靜態方法引用,基本的結構就是------> 類名 :: 靜態方法名.
四 .例項方法
首先我們看下面的例子 :
publicclass
staticclass
public
static
void
main(string args)
}
我們看到例項方法和靜態方法引用的區別僅僅就是我們使用例項物件進行方法引用了.
現在看下面的**:
//我們使用乙個function直接方法引用returnlength
functionfunc =string::length;
trek");
system.
out.println(length);
我們發現我們使用類名引用了乙個例項方法,但是我們需要注意的就是我們返回的函式式介面的入參到底是什麼?
沒錯,例項方法僅僅就是在入參新增了乙個this而已.
五 . 構造方法引用
我們知道建構函式其實和普通的函式的區別僅僅在於建構函式的返回值.
首先我們看下面的乙個例子:
suppliersupplier = staticclass::new; supplier.
get().instancemethod();
上面展示的是乙個無參建構函式的情況,現在我們展示一下有參建構函式的情況.
functionfunc = staticclass :: new;"trek
").instancemethod();
在這裡我們看到我們我們使用相同的語法,卻建立了不同的物件,這完全依賴於 j**a8之中的引數推導的功能.
8 方法引用
8 方法引用 呼叫特定方法的lambda表示式的一種快捷寫法,可以讓你重複使用現有 的方法定義,並像lambda表示式一樣傳遞他們。sku getskuprice 目標引用 方法名 具體實現 1 指向靜態方法的方法引用 string number integer parseint 2 指向任意型別例...
jdk8 方法引用
方法引用的形式 方法引用的標準形式是 類名 方法名。注意 只需要寫方法名,不需要寫括號 有以下四種形式的方法引用 型別 示例 引用靜態方法 containingclass staticmethodname 引用某個物件的例項方法 containingobject instancemethodname...
java 8 方法引用
如果lambda 表示式的 塊只有一行 程式就可以省略表示式 塊的花括號,不僅如此,如果只有一行 還可以使用方法的引用和構造器的引用 下面為四種引用的例項 public class function functionalinte ce inte ce mytest3 functionalinte c...