JDK1 8新特性 方法引用

2021-09-26 15:13:34 字數 3465 閱讀 8601

方法引用是對lamdba的一種優化,因此,能用方法引用的地方,一定能用lamdba表示式。使用lamdba表示式,方法的引數必須是函式式介面,所以使用方法引用也要有乙個函式式介面。

前提:物件已經存在,方法已經存在,就能使用了

前提:物件是已經存在的,成員方法也是已經存在的

定義乙個函式式介面

@functionalinte***ce

public inte***ce printable

定義乙個實體類:

public class methodrerobject 

}

測試:

//通過物件名引用成員方法

//前提:物件名是已經存在的,成員方法也是已經存在的

public class demo01objectmethodref

public static

void

main

(string[

] args));

//使用方法引用優化

//物件methodrerobject已經存在,方法printuppercasestring也已經存在

methodrerobject methodrerobject=new methodrerobject()

;printstring

(methodrerobject:

:printuppercasestring);}

}

前提:類已經存在,靜態方法也已經存在

計算絕對值:math已經存在,靜態方法abs也已經存在

@functionalinte***ce

public inte***ce calcable

public class demo02staticmethodref

public static

void

main

(string[

] args));

system.out.

println

(i);

//方法引用優化

int a =

method(-

12, math:

:abs)

; system.out.

println

(a);}}

1012

仔細觀察函式式介面calcable,發現方法是有乙個入參和乙個出參的,完全可以直接使用jdk提供的核心函式式介面之一function

使用function改寫:

public class demo02staticmethodref 

public static

void

main

(string[

] args));

system.out.

println

(i);

int a =

method(-

12, math:

:abs)

; system.out.

println

(a);

}}

函式式介面

@functionalinte***ce

public inte***ce greetable

父類:

使用super引用父類的成員方法,super已經存在的,成員方法sayhello也是已經存在的

public class human 

}

//子類

public class man extends human

public void

method

(greetable greetable)

public void

show()

);///因為有父子關係,super代表父類物件,可以使用super呼叫父類的成員方法

// method(()->);

//使用super引用父類的成員方法,super已經存在的,成員方法sayhello也是已經存在的

method

(super:

:sayhello);}

public static

void

main

(string[

] args)

}

public class husband 

//第乙個引數就是第二個引數的方法的入參

public void

marry

(string s,consumer consumer)

public void

(string s)

);//方法引用優化

//通過this引用本類的成員方法

marry

(s,this:

:buyhouse );}

public static

void

main

(string[

] args)

}

public class persontest 

public static

void

main

(string[

] args));

//使用方法引用

//構造方法new person(string name)已存在

//建立物件已知,就可以使用person引用new建立物件

printname

("李四"

,person:

:new );}

}

public class arraydemo 

public static

void

main

(string[

] args));

system.out.

println

(ints1.length)

;//方法引用優化

//已知建立的是int陣列

//陣列的長度也是已知的

int[

] ints =

creatarray(11

,int

::new)

; system.out.

println

(ints.length);}

}

jdk1 8新特性之方法引用

一.方法引用 若lambda 體中的內容有方法已經實現了,我們可以使用方法引用 可以理解為方法引用是lambda 表示式的另外一種表現形式 主要有三種語法格式 物件 例項方法名 類 靜態方法名 類 例項方法名 注意 1.lambda體中呼叫方法的引數列表與返回值型別,要與函式式介面中抽象方法的函式列...

JDK1 8的新特性

jdk1.8之前的介面不可以有方法體,但從jdk1.8開始,介面中的方法可以帶有方法體為什麼要新增這個特性?介面就是為了定義乙個標準,這個標準要求所有的實現類實現這些抽象方法。但存在某些方法,所有的實現類 都是一樣的,索性就把這些 挪到介面中。使用的方法?通過default來修飾這個方法public...

JDK1 8新特性簡介

可以用static default來定義介面方法 用default來定義普通方法,這樣子類就不用強制覆寫這個方法了。用static來定義靜態方法 專給lanmda使用的介面加上annotation functionalinte ce 其中只能有乙個方法 使用 引數 程式執行語句 引數 簡單返回 引數...