1. 程式人生 > >JDK信新特性-----方法引用(引用類的靜態方法、引用物件的普通方法、引用類的普通方法、引用類的構造方法)

JDK信新特性-----方法引用(引用類的靜態方法、引用物件的普通方法、引用類的普通方法、引用類的構造方法)

方法引用的出現:
在JDK1.8以前,引用一般指的是陣列引用、類引用和介面引用,但在JDK1.8後,有了方法引用,引用就是別名,方法引用是一個方法是另一個方法的別名。

方法引用有四種形式:

  • 引用類中靜態方法
    使用格式: 類名稱 :: 靜態方法名稱
  • 引用某個物件的方法
    使用格式: 例項化物件 :: 普通方法
  • 引用類中普通方法
    使用格式:類名稱 :: 普通方法
    注:方法引用一般和函式式介面一起使用。
  • 引用類的構造方法
    使用格式:類名稱 ::new

一:引用類的靜態方法---->類名稱 :: 靜態方法名稱
引用類中靜態方法:介面中抽象方法是引用的類的靜態方法別名,呼叫這個抽象方法相當於呼叫類的靜態方法。

@FunctionalInterface //函數語言程式設計介面 接口裡只有一個抽象方法
interface  IString<T,E>
{
    E switchPara(T t);  //將給定型別轉換成字串
}
public class Method
{
    public static void main(String[] args)
    {
        ////valueOf是String類的靜態方法,將特定型別轉換成字串
        IString<Integer,String> s=String ::valueOf; //引用類中靜態方法,引用的是String類的靜態方法valueOf
int num=10; String str=s.switchPara(num); //swichPare是valueOf的別名,相當於呼叫的是String.valueOf(num)方法 System.out.println(str); //10 } }

二:引用某個物件的方法----> 例項化物件 :: 普通方法
引用某個物件的方法:介面中抽象方法是這個物件的方法的別名,呼叫這個抽象方法相當於呼叫該物件的方法。

interface  IString<T>
{
    T lower();
}
public class Method
{ public static void main(String[] args) { //"PICK"是字串物件 "PICK".toLowerCase()將字串轉為小寫 IString<String> s="PICK"::toLowerCase; //引用字串物件方法,引用的是toLowerCase方法 String str=s.lower(); //接口裡的lower抽象方法是toLowerCase方法的別名,相當於呼叫的是”PICk".toLowerCase()方法 System.out.println(str); //pick } }

三:引用類的普通方法---->類名稱 ::普通方法名
引用類中的普通方法:介面中抽象方法是該類普通方法的別名,呼叫這個抽象方法相當於呼叫的這個類的普通方法。

@FunctionalInterface
interface  IString<T,E>
{
     T compare(E t1,E t2);
}
public class Method
{
    public static void main(String[] args)
    {
        IString<Integer,String> s=String :: compareTo; //  引用的是String類的compareTo方法
        Integer ret=s.compare("範","楊");  //接口裡的comare抽象方法是compareTo方法的別名,相當於呼叫的是"範".compareTo("楊")
        System.out.println(ret); // 7067
    }
}

四:引用類的構造方法---->類名稱 ::new
引用類的構造方法:如果介面中抽象方法是例項化一個物件,引用類的構造方法後,那麼呼叫介面的create方法相當於呼叫類的構造。

class person
{
    private  String name;
    public person(String name)
    {
        this.name=name;
    }

    @Override
    public String toString() {
        return "name:"+name;
    }
}
@FunctionalInterface
interface  IString<P,T>
{
    P createPerson(T t);  //例項化一個person物件
}
public class Method
{
    public static void main(String[] args)
    {
        IString<person,String> s=person :: new; //  引用的是person類的構造方法
        person p=s.createPerson("pick");  //createPerson成為person類構造方法的別名,相當於呼叫的person類的構造方法
        System.out.println(p); // name:pick
    }
}