【本節目标】
通過閱讀本節内容,你将了解到引用不同類型方法的不同方式,并學會使用函數式接口進行方法的引用。
方法引用
引用資料類型最大的特點是可以進行記憶體的指向處理,但是在傳統的開發之中一直所使用的隻是對象引用操作,而從JDK1.8之後也提供有方法的引用,即:不同的方法名稱可以描述同一個方法。如果要進行方法的引用在Java中提供有如下的四種形式:
- 引用靜态方法:類名稱:: static方法名稱;
- 引用某個執行個體對象的方法:執行個體化對象:: 普通方法;
- 引用特定類型的方法:特定類:: 普通方法;
- 引用構造方法:類名稱:: new。
範例:引用靜态方法
在String類中提供有String.valueOf()方法,這個方法就屬于靜态方法。
- 方法定義:public static String valueOf(int i),該方法有參數,并且還有傳回值;
@FunctionalInterface //函數式接口
//P描述的是參數,R描述的是傳回值
interface IFunction<P,R>{
public R change(P p) ;
}
public class JavaDemo{
public static void main(String[] args) {
IFunction<Integer,String> fun = String::valueOf ;
String str = fun.change(100) ;
System.out.println(str.length()) ; //3
}
}
利用方法引用這一概念,可以為一個方法定義多個名字,但是要求必須是函數式接口。
範例:引用執行個體化對象中的方法
在String類裡面有一個轉大寫的方法:public String toUpperCase();
- 這個方法是必須在有執行個體化對象提供的情況下才可以調用;
@FunctionalInterface //函數式接口
//P描述的是參數,R描述的是傳回值
interface IFunction<R>{
public R upper();
}
public class JavaDemo{
public static void main(String[] args) {
IFunction<String> fun = "www.mldn.cn"::toUpperCase;
System.out.println(fun.upper()); //WWW.MLDN.CN
}
}
在進行方法引用的時候也可以引用一些特定類中的一些操作方法,在String類中提供有一個字元串大小關系的比較:public int compareTo(String
anotherString);
這是一個普通方法,如果要引用普通方法,則往往都需要執行個體化對象,但是如果說現在不想給出執行個體化對象,隻是想引用這個方法,則就可以使用特定類進行引用處理。
範例:引用特定類中的方法
@FunctionalInterface //函數式接口
//P描述的是參數,R描述的是傳回值
interface IFunction<P>{
public int compare(P p1,P p2);
}
public class JavaDemo{
public static void main(String[] args) {
IFunction<String> fun = String::compareTo;
System.out.println(fun.compare("A","a")); //-32
}
}
在方法引用裡面最具有殺傷力的就是構造方法的引用。
範例:引用構造方法
class Person
{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String toString(){
return "姓名:"+this.name + "、年齡:"+ this.age;
}
}
@FunctionalInterface //函數式接口
interface IFunction<R>{
public R create(String name,int age);
}
public class Message{
public static void main(String[] args) {
IFunction<Person> fun = Person::new ;
System.out.println(fun.create("張三",20).toString()); //姓名:張三、年齡:20
}
}
提供方法引用的概念更多情況下也隻是彌補了對于引用的支援功能。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:迅速了解Java預設函數式接口 | 帶你學《Java面向對象程式設計》之八十八 更多Java面向對象程式設計文章檢視此處