JDK信新特性-----方法引用(引用類的靜態方法、引用物件的普通方法、引用類的普通方法、引用類的構造方法)
阿新 • • 發佈:2018-11-11
方法引用的出現:
在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
}
}