關(guān)于Java中方法引用的示例
一、方法引用符
方法引用符:
::該符號位引用運(yùn)算符,而它所在的表達(dá)式被稱為方法引用
推導(dǎo)與省略:
如果使用Lambda,那么根據(jù)"可推導(dǎo)就是可省略"的原則,無需指定參數(shù)類型,也無需指定的重載形式,它們都將自動(dòng)推導(dǎo)
如果使用方法引用,也就是可以根據(jù)上下文進(jìn)行推導(dǎo)
方法引用是Lambda的孿生兄弟
二、引用類方法
引用類方法,其實(shí)就是引用類的靜態(tài)方法
格式:
類名::靜態(tài)方法
范例:
Integer::parseInt
Integer類的方法:public static int parseInt(String s)將此String類型數(shù)據(jù)
練習(xí)描述:
定義一個(gè)接口(Converter),里面定義一個(gè)抽象方法int convert(String s);
定義一個(gè)測試類(ConverterDemo),在測試類中提供兩個(gè)方法
一個(gè)方法是:useConverter(Converter c)
一個(gè)方法是主方法,在主方法中調(diào)用useConverter方法
代碼演示:
public interface Converter {
int convert(String s);
}
public class ConverterDemo {
public static void main(String[] args) {
//Lambda寫法
useConverter(s -> Integer.parseInt(s));
//引用類方法
useConverter(Integer::parseInt);
}
private static void useConverter(Converter c) {
int number = c.convert("666");
System.out.println(number);
}
}使用說明:
Lambda表達(dá)式被類方法替代的時(shí)候,它的形式參數(shù)全部傳遞給靜態(tài)方法作為參數(shù)
三、引用對象的實(shí)例方法
引用對象的實(shí)例方法,其實(shí)就引用類中的成員方法
格式:
對象::成員方法
范例:
"HelloWorld"::toUpperCase String類中的方法:public String toUpperCase() 將此String所有字符轉(zhuǎn)換為大寫
練習(xí)描述:
- 定義一個(gè)類(PrintString),里面定義一個(gè)方法 public void printUpper(String s): 把字符串參數(shù)變成大寫的數(shù)據(jù),然后在控制臺輸出
- 定義一個(gè)接口(Printer),里面定義一個(gè)抽象方法 void printUpperCase(String s)
- 定義一個(gè)測試類(PrinterDemo),在測試類中提供兩個(gè)方法 一個(gè)方法是: usePrinter(Printer p) 一個(gè)方法是主方法,在主方法中調(diào)用usePrinter方法
代碼演示:
public class PrintString {
//把字符串參數(shù)變成大寫的數(shù)據(jù),然后在控制臺輸出
public void printUpper(String s) {
String result = s.toUpperCase();
System.out.println(result);
}
}
public interface Printer {
void printUpperCase(String s);
}
public class PrinterDemo {
public static void main(String[] args) {
//Lambda簡化寫法
usePrinter(s -> System.out.println(s.toUpperCase()));
//引用對象的實(shí)例方法
PrintString ps = new PrintString();
usePrinter(ps::printUpper);
}
private static void usePrinter(Printer p) {
p.printUpperCase("HelloWorld");
}
}使用說明:
Lambda表達(dá)式被對象的實(shí)例方法替代的時(shí)候,它的形式參數(shù)全部傳遞給該方法作為參數(shù)
四、引用類的實(shí)例方法
引用類的實(shí)例方法,其實(shí)就是引用類中的成員方法
格式:
類名::成員方法
范例:
String::substring
public String substring(int beginIndex,int endIndex)
從beginIndex開始到endIndex結(jié)束,截取字符串。返回一個(gè)子串,子串的長度為endIndex-beginIndex
練習(xí)描述:
- 定義一個(gè)接口(MyString),里面定義一個(gè)抽象方法:
- String mySubString(String s,int x,int y);
- 定義一個(gè)測試類(MyStringDemo),在測試類中提供兩個(gè)方法
- 一個(gè)方法是:useMyString(MyString my)
- 一個(gè)方法是主方法,在主方法中調(diào)用useMyString方法
代碼演示:
public interface MyString {
String mySubString(String s,int x,int y);
}
public class MyStringDemo {
public static void main(String[] args) {
//Lambda簡化寫法
useMyString((s,x,y) -> s.substring(x,y));
//引用類的實(shí)例方法
useMyString(String::substring);
}
private static void useMyString(MyString my) {
String s = my.mySubString("HelloWorld", 2, 5);
System.out.println(s);
}
}五、引用構(gòu)造器
引用構(gòu)造器,其實(shí)就是引用構(gòu)造方法
格式:
類名::new
范例:
Student::new
練習(xí)描述:
- 定義一個(gè)類(Student),里面有兩個(gè)成員變量(name,age)
- 并提供無參構(gòu)造方法和帶參構(gòu)造方法,以及成員變量對應(yīng)的get和set方法
- 定義一個(gè)接口(StudentBuilder),里面定義一個(gè)抽象方法
- Student build(String name,int age);
- 定義一個(gè)測試類(StudentDemo),在測試類中提供兩個(gè)方法
- 一個(gè)方法是:useStudentBuilder(StudentBuilder s)
- 一個(gè)方法是主方法,在主方法中調(diào)用useStudentBuilder方法
代碼演示:
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public interface StudentBuilder {
Student build(String name,int age);
}
public class StudentDemo {
public static void main(String[] args) {
//Lambda簡化寫法
useStudentBuilder((name,age) -> new Student(name,age));
//引用構(gòu)造器
useStudentBuilder(Student::new);
}
private static void useStudentBuilder(StudentBuilder sb) {
Student s = sb.build("林青霞", 30);
System.out.println(s.getName() + "," + s.getAge());
}
}使用說明:
Lambda表達(dá)式被構(gòu)造器替代的時(shí)候,它的形式參數(shù)全部傳遞給構(gòu)造器作為參數(shù)
到此這篇關(guān)于關(guān)于Java中方法引用的示例的文章就介紹到這了,更多相關(guān)Java 方法引用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)入?yún)?shù)據(jù)批量數(shù)據(jù)校驗(yàn)詳解
在業(yè)務(wù)處理中一般入?yún)⑹菃螚l數(shù)據(jù),這樣數(shù)據(jù)校驗(yàn)比較容易,但是這種方法對于集合數(shù)據(jù)的校驗(yàn)不適用,下面我們就來看看如何對入?yún)?shù)據(jù)進(jìn)行批量數(shù)據(jù)校驗(yàn)吧2024-02-02
從前端Vue到后端Spring Boot接收J(rèn)SON數(shù)據(jù)的正確姿勢(常見錯(cuò)誤及問題)
這篇文章主要介紹了從前端Vue到后端Spring Boot接收J(rèn)SON數(shù)據(jù)的正確姿勢(常見錯(cuò)誤及問題),本文將從前端Vue到后端Spring Boot,詳細(xì)介紹接收J(rèn)SON數(shù)據(jù)的正確姿勢,幫助開發(fā)人員更好地處理JSON數(shù)據(jù),感興趣的朋友一起看看吧2024-02-02
java string 轉(zhuǎn)date方法如何實(shí)現(xiàn)
在開發(fā)應(yīng)用中經(jīng)常會(huì)使用到j(luò)ava string 轉(zhuǎn)date這種不是很常見的做法,本文將以此問題提供詳細(xì)解決方案,需要了解的朋友可以參考下2012-11-11
springboot整合shiro之thymeleaf使用shiro標(biāo)簽的方法
Thymeleaf 是一個(gè)跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP ,這篇文章主要介紹了springboot整合shiro之thymeleaf使用shiro標(biāo)簽的相關(guān)知識,需要的朋友可以參考下2021-10-10
mybatis實(shí)現(xiàn)圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了mybatis實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
Java concurrency之公平鎖(二)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency之公平鎖的第二篇內(nèi)容,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
半小時(shí)實(shí)現(xiàn)Java手?jǐn)]網(wǎng)絡(luò)爬蟲框架(附完整源碼)
最近在做一個(gè)搜索相關(guān)的項(xiàng)目,需要爬取網(wǎng)絡(luò)上的一些鏈接存儲到索引庫中,自己寫了一個(gè)簡單的網(wǎng)絡(luò)爬蟲,感興趣的可以了解一下2021-06-06
淺談MyBatis通用Mapper實(shí)現(xiàn)原理
這篇文章主要介紹了淺談MyBatis通用Mapper實(shí)現(xiàn)原理,本文會(huì)先介紹通用 Mapper 的簡單原理,然后使用最簡單的代碼來實(shí)現(xiàn)這個(gè)過程。感興趣的小伙伴們可以參考一下2018-10-10

