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

