關(guān)于Java中方法引用的示例
一、方法引用符
方法引用符:
::該符號(hào)位引用運(yùn)算符,而它所在的表達(dá)式被稱為方法引用
推導(dǎo)與省略:
如果使用Lambda,那么根據(jù)"可推導(dǎo)就是可省略"的原則,無(wú)需指定參數(shù)類型,也無(wú)需指定的重載形式,它們都將自動(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è)測(cè)試類(ConverterDemo),在測(cè)試類中提供兩個(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); } }
使用說(shuō)明:
Lambda表達(dá)式被類方法替代的時(shí)候,它的形式參數(shù)全部傳遞給靜態(tài)方法作為參數(shù)
三、引用對(duì)象的實(shí)例方法
引用對(duì)象的實(shí)例方法,其實(shí)就引用類中的成員方法
格式:
對(duì)象::成員方法
范例:
"HelloWorld"::toUpperCase String類中的方法:public String toUpperCase() 將此String所有字符轉(zhuǎn)換為大寫
練習(xí)描述:
- 定義一個(gè)類(PrintString),里面定義一個(gè)方法 public void printUpper(String s): 把字符串參數(shù)變成大寫的數(shù)據(jù),然后在控制臺(tái)輸出
- 定義一個(gè)接口(Printer),里面定義一個(gè)抽象方法 void printUpperCase(String s)
- 定義一個(gè)測(cè)試類(PrinterDemo),在測(cè)試類中提供兩個(gè)方法 一個(gè)方法是: usePrinter(Printer p) 一個(gè)方法是主方法,在主方法中調(diào)用usePrinter方法
代碼演示:
public class PrintString { //把字符串參數(shù)變成大寫的數(shù)據(jù),然后在控制臺(tái)輸出 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簡(jiǎn)化寫法 usePrinter(s -> System.out.println(s.toUpperCase())); //引用對(duì)象的實(shí)例方法 PrintString ps = new PrintString(); usePrinter(ps::printUpper); } private static void usePrinter(Printer p) { p.printUpperCase("HelloWorld"); } }
使用說(shuō)明:
Lambda表達(dá)式被對(duì)象的實(shí)例方法替代的時(shí)候,它的形式參數(shù)全部傳遞給該方法作為參數(shù)
四、引用類的實(shí)例方法
引用類的實(shí)例方法,其實(shí)就是引用類中的成員方法
格式:
類名::成員方法
范例:
String::substring
public String substring(int beginIndex,int endIndex)
從beginIndex開始到endIndex結(jié)束,截取字符串。返回一個(gè)子串,子串的長(zhǎng)度為endIndex-beginIndex
練習(xí)描述:
- 定義一個(gè)接口(MyString),里面定義一個(gè)抽象方法:
- String mySubString(String s,int x,int y);
- 定義一個(gè)測(cè)試類(MyStringDemo),在測(cè)試類中提供兩個(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簡(jiǎn)化寫法 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)
- 并提供無(wú)參構(gòu)造方法和帶參構(gòu)造方法,以及成員變量對(duì)應(yīng)的get和set方法
- 定義一個(gè)接口(StudentBuilder),里面定義一個(gè)抽象方法
- Student build(String name,int age);
- 定義一個(gè)測(cè)試類(StudentDemo),在測(cè)試類中提供兩個(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簡(jiǎn)化寫法 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()); } }
使用說(shuō)明:
Lambda表達(dá)式被構(gòu)造器替代的時(shí)候,它的形式參數(shù)全部傳遞給構(gòu)造器作為參數(shù)
到此這篇關(guān)于關(guān)于Java中方法引用的示例的文章就介紹到這了,更多相關(guān)Java 方法引用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Swing BoxLayout箱式布局的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java Swing BoxLayout箱式布局的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12使用idea創(chuàng)建web框架和配置struts的方法詳解
這篇文章主要介紹了使用idea創(chuàng)建web框架和配置struts的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Spring工廠方法創(chuàng)建(實(shí)例化)bean實(shí)例代碼
這篇文章主要介紹了Spring工廠方法創(chuàng)建bean實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Java實(shí)戰(zhàn)之兼職平臺(tái)系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java編寫一個(gè)兼職平臺(tái)系統(tǒng),采用到的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf等,感興趣的小伙伴可以了解一下2022-03-03容器環(huán)境的JVM內(nèi)存設(shè)置實(shí)踐記錄
Docker和K8S的興起,很多服務(wù)已經(jīng)運(yùn)行在容器環(huán)境,對(duì)于java程序,JVM設(shè)置是一個(gè)重要的環(huán)節(jié),這里總結(jié)下我們項(xiàng)目里的最佳實(shí)踐,對(duì)容器環(huán)境的JVM內(nèi)存相關(guān)知識(shí)感興趣的朋友一起看看吧2022-03-03寫了兩年代碼之后再來(lái)談一談Spring中的Bean
這篇文章主要介紹了寫了兩年代碼之后再來(lái)看看Spring中的Bean,這里列出四種常用的添加Bean的方式,介紹最基本的@Bean注解,@Bean注解聲明這個(gè)類是一個(gè)Bean,需要的朋友可以參考下2021-10-10java父子節(jié)點(diǎn)parentid樹形結(jié)構(gòu)數(shù)據(jù)的規(guī)整
這篇文章主要介紹了java父子節(jié)點(diǎn)parentid樹形結(jié)構(gòu)數(shù)據(jù)的規(guī)整,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07SpringBoot JPA實(shí)現(xiàn)增刪改查、分頁(yè)、排序、事務(wù)操作等功能示例
本篇文章主要介紹了SpringBoot JPA實(shí)現(xiàn)增刪改查、分頁(yè)、排序、事務(wù)操作等功能示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Alibaba?Fastjson之超好用的JOSN解析庫(kù)
這篇文章主要介紹了Alibaba?Fastjson之超好用的JOSN解析庫(kù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10在spring中實(shí)例化bean無(wú)效的問(wèn)題
這篇文章主要介紹了在spring中實(shí)例化bean無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02