java uppercase方法_java-方法引用
/*** 方法引用格式:
* 雙冒號:: 引用運算符,它所在的表達式被稱為方法引用。如果Lambda表達式
* 的函數(shù)方案已經(jīng)存在于某個地方的實現(xiàn)中,
* ===》那么可以通過雙冒號來引用改方法作為Lambda表達式的代替者*/
例子:
public classDemo01Print {private static voidprintString(Printable p){
p.print("quan");
}public static voidmain(String[] args) {
printString((s)->{
System.out.println(s);
});/*** 表達式的目的:打印參數(shù)傳遞的字符串
* 把參數(shù)s,傳遞給System.out對象,調(diào)用out對象的pringln方法進行輸出
* System.out對象已經(jīng)存在
* pringln方法已經(jīng)存在
* =====》可以使用方法引用來優(yōu)化表達式
* 就是使用system.out方法直接引用(調(diào)用)pringln方法。*/printString(System.out::println);
}
結(jié)果輸出:
quan
quan
通過對象名引用成員方法
最常見的一種用法,其實就是上面的做法:
/*** 通過對象名引用成員方法
* 前提:
* 對象名存在,方法名存在
* 就可以使用對象名來引用成員方法*/
例子:
1先創(chuàng)建對象類
public classMethodRefObject {public voidpringUpperCaseString(String s){
System.out.println(s.toUpperCase());
}
}
2創(chuàng)建函數(shù)式接口
@FunctionalInterfacepublic interfacePrintable {//定義字符串的抽象方法
voidprint(String s);
}
3測試方法:
public classDemo01MethodRefObject {private static voidpringString(Printable p){
p.print("quan");
}public static voidmain(String[] args) {
pringString((s)->{//創(chuàng)建MethodRefObject對象
MethodRefObject obj = newMethodRefObject();//調(diào)用對象里面的成員方法pringUpperCaseString把字符//串按照大寫輸出
obj.pringUpperCaseString(s);
});//使用方法引用優(yōu)化,先創(chuàng)建MethodObject對象
MethodRefObject obj = newMethodRefObject();
pringString(obj::pringUpperCaseString);
}
}/*** re:
* QUAN
* QUAN
**/
通過類名稱引用靜態(tài)方法
/*** 通過類名引用靜態(tài)承焰方法
* 前提:
* 類已經(jīng)存在,靜態(tài)成員方法存在
**/
例子:
public classDemo01StaticMethodReference {//定義一個方法,方法的參數(shù)傳遞要計算的整數(shù)和函數(shù)式接口Calcable
private static int method(intnum,Calcable c){returnc.calAbs(num);
}public static voidmain(String[] args) {//調(diào)用method方法
int i =method(-10,(n)->{//計算絕對值,使用的是Math類當(dāng)中的靜態(tài)方法abs
returnMath.abs(n);
});
System.out.println(i);/***使用方法引用優(yōu)化Lambda表達式
* Math類存在
* abs計算絕對值靜態(tài)方法存在*/
int i1 = method(-10,Math::abs);
System.out.println(i1);
}
}
通過supper引用父類的成員方法
存在子父關(guān)系
創(chuàng)建一個父類
//父類
public classHuman {public voidsayHello(){
System.out.println("say hello");
}
}
創(chuàng)建一個函數(shù)式接口
@FunctionalInterfacepublic interfaceGreetable {voidgreet();
}
創(chuàng)建一個子類:
public class Man extendsHuman{
@Overridepublic voidsayHello() {
System.out.println("hello,I'm Man");
}public voidmethod(Greetable g){
g.greet();
}public voidshow(){
method(()->{//創(chuàng)建父類
Human human = newHuman();
human.sayHello();
});/*** 存在子夫類關(guān)系,存在super關(guān)鍵字,代表父類
* 直接通過super調(diào)用父類成員方法*/method(()->{super.sayHello();
});/*** 通過super引用類的成員方法*/method(super::sayHello);
}public static voidmain(String[] args) {newMan().show();newMan().sayHello();
}
}
結(jié)果:
say hello
say hello
say hello
hello,I'm Man
通過this引用成員方法
this代表當(dāng)前對象,如果需要引用的方法就是當(dāng)前類中的成員方法。
可以使用this::成員方法來使用方法引用
定義一個接口
@FunctionalInterfacepublic interfaceRichable {voidbuy();
}
/*** 通過this引用奔雷成員方法*/
public classHusbard {public voidbuyHome(){
System.out.println("買房子");
}public voidmarry(Richable r){
r.buy();
}public voidsoHappy(){
marry(()->{//使用this成員方法
this.buyHome();
});/*** 使用方法引用優(yōu)化Lambda表達式*/marry(this::buyHome);
}public static voidmain(String[] args) {newHusbard().soHappy();
}
}
類的構(gòu)造器引用
構(gòu)造器和類名完全一致,所以使用方式為:類名稱::new的格式表示。
定義一個函數(shù)式接口
/*** 定義一個創(chuàng)建Person對象的函數(shù)式接口*/@FunctionalInterfacepublic interfacePersonBuilder {//根據(jù)姓名創(chuàng)建Person對象返回
Person builderPerson(String name);
}
一個要被創(chuàng)建的類Person
public classPerson {privateString name;publicPerson() {
}publicPerson(String name) {this.name =name;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}
}
/*** 類的構(gòu)造器引用*/
public classDemo {public static voidprintName(String name,PersonBuilder builder){
Person person=builder.builderPerson(name);
System.out.println(person.getName());
}public static voidmain(String[] args) {
printName("quan",(name)->{return newPerson(name);
});/*** 使用方法引用優(yōu)化lambda表達*/printName("quan2",Person::new);
}
}//re:quan//quan2
數(shù)組構(gòu)造器的引用
數(shù)組是Object的子類對象,同樣具有構(gòu)造器,但是語法不太一樣
/*** 數(shù)組的構(gòu)造器引用
* 數(shù)組::new
* 例子:int[]::new*/
創(chuàng)建一個接口
//創(chuàng)建數(shù)組的函數(shù)式接口
@FunctionalInterfacepublic interfaceArrayBuilder {//返回一個給定長度的int類型數(shù)組
int[] builderArray(intlength);
}
public classDemo1 {public static int[] createArray(intlength,ArrayBuilder ab){returnab.builderArray(length);
}public static voidmain(String[] args) {//調(diào)用create方法,傳遞數(shù)組長度和表達式
int[] lenint = createArray(12,(len)->{return new int[len];
});
System.out.println(lenint.length);//優(yōu)化,int[]就是數(shù)組的構(gòu)造函數(shù)名字
int[] lenint2 = createArray(15,int[]::new);
System.out.println(lenint2.length);
}
}//re:12//15
總結(jié)
以上是生活随笔為你收集整理的java uppercase方法_java-方法引用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java thread 内存泄露_Jav
- 下一篇: java基本数据类型与封装类 示例_Ja