天天看點

教你如何引用方法 | 帶你學《Java面向對象程式設計》之八十七

上一篇:教你利用Lambda将代碼化繁為簡 | 帶你學《Java面向對象程式設計》之八十六

【本節目标】

通過閱讀本節内容,你将了解到引用不同類型方法的不同方式,并學會使用函數式接口進行方法的引用。

方法引用

引用資料類型最大的特點是可以進行記憶體的指向處理,但是在傳統的開發之中一直所使用的隻是對象引用操作,而從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面向對象程式設計文章檢視此處