方法引用是對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 其中只能有乙個方法 使用 引數 程式執行語句 引數 簡單返回 引數...