摘要:概述簡介若體中的功能,已經有方法提供了實現,可以使用方法引用可以將方法引用理解為表達式的另外一種表現形式方法引用的三種形式對象的引用實例方法名類名靜態方法名類名實例方法名注意方法引用所引用的方法的參數列表與返回值類型,需要與函數式接口中抽象
1. 概述 1.1 簡介
若 Lambda 體中的功能,已經有方法提供了實現,可以使用方法引用(可以將方法引用理解為 Lambda 表達式的另外一種表現形式)
方法引用的三種形式
對象的引用::實例方法名
類名::靜態方法名
類名::實例方法名
2. 方法引用 2.2 對象的引用::實例方法名注意:
①方法引用所引用的方法的參數列表與返回值類型,需要與函數式接口中抽象方法的參數列表和返回值類型保持一致!
②若 Lambda 的參數列表的第一個參數,是實例方法的調用者,第二個參數(或無參)是實例方法的參數時,格式: ClassName::MethodName
public class Employee implements Serializable { private int id; private String name; private int age; private double salary; public Employee() { } public Employee(String name) { this.name = name; } public Employee(String name, int age) { this.name = name; this.age = age; } public Employee(int id, String name, int age, double salary) { this.id = id; this.name = name; this.age = age; this.salary = salary; } // 省略 getter 和 setter 方法 }
@Test public void t1() { // lambda 表達式方式 PrintStream printStreamLamBda = System.out; Consumer2.3 類名::靜態方法名consumerLambda = (x) -> printStreamLamBda.println(x); consumerLambda.accept("hello lambda"); // 方法引用方式 PrintStream printStream = System.out; // 使用方法引用前提是 Consumer 的 accept 方法的參數列表和返回值必須與 println 方法的參數列表和返回值一致(參考注意①) Consumer con = printStream::println; con.accept("hello method!"); } @Test public void t2(){ Employee emp = new Employee(100,"ling",18,10000); // lambda 表達式方式 Supplier supplierLambda = () -> emp.getName(); System.out.println(supplierLambda.get()); // 方法引用方式 Supplier supplier = emp::getName; System.out.println(supplier.get()); }
@Test public void t3(){ BiFunction2.4 類名::實例方法名fun = (x, y) -> Math.max(x, y); System.out.println("Lambda : " + fun.apply(1.5, 22.2)); System.out.println("------------------------------------"); BiFunction fun2 = Math::max; System.out.println("方法引用 : " + fun2.apply(1.2, 1.5)); }
在 Employee 中添加方法
public String show() { return "測試方法引用!"; }
測試方法
@Test public void test5(){ BiPredicate3. 構造器引用 3.1 簡介bp = (x, y) -> x.equals(y); System.out.println(bp.test("ling", "ling")); System.out.println("------------------------------------"); BiPredicate bp2 = String::equals; System.out.println(bp2.test("ling", "ling")); System.out.println("------------------------------------"); Function fun = (e) -> e.show(); System.out.println(fun.apply(new Employee())); System.out.println("------------------------------------"); Function fun2 = Employee::show; System.out.println(fun2.apply(new Employee())); }
使用構造器引用來創建對象
注:被調用的構造器的參數列表,需要與函數式接口中參數列表保持一致!
構造器引用的語法格式
類名::new
3.2 實例@Test public void t5(){ // Lambda 方式調用無參構造器 Supplier4. 數組引用 4.1 簡介sup = () -> new Employee(); System.out.println(sup.get()); System.out.println("------------------------------------"); // 構造器引用方式調用無參構造器 Supplier sup2 = Employee::new; System.out.println(sup2.get()); // 調用一個參數構造器 Function fun = Employee::new; // 調用兩個個參數構造器 BiFunction fun2 = Employee::new; }
用于創建數組
語法格式
類型[]::new;
4.2 實例@Test public void t6() { // Lambda 方式 FunctionfunLambda = (args) -> new String[args]; String[] strsLambda = funLambda.apply(50); System.out.println("Lambda : " + strsLambda.length); System.out.println("------------------------------------"); // 數組引用方式 Function func = String[]::new; String[] strArr = func.apply(100); System.out.println("arr : " + strArr.length); }
本文首發于凌風博客:Java 8 新特性之方法引用
作者:凌風
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72756.html
以下是Java技術棧微信公眾號發布的關于 Java 的技術干貨,從以下幾個方面匯總。 Java 基礎篇 Java 集合篇 Java 多線程篇 Java JVM篇 Java 進階篇 Java 新特性篇 Java 工具篇 Java 書籍篇 Java基礎篇 8張圖帶你輕松溫習 Java 知識 Java父類強制轉換子類原則 一張圖搞清楚 Java 異常機制 通用唯一標識碼UUID的介紹及使用 字符串...
摘要:歐陽思海繼承接口后,又加了新的抽象方法,這個接口就不再是函數式接口默認方法在接口中添加了一個默認方法。總結在這篇文章中,我們講了表達式方法引用函數式接口接口中的靜態方法接口中的默認方法的使用。 今天我來聊聊 Java8 的一些新的特性,確實 Java8 的新特性的出現,給開發者帶來了非常大的便利,可能剛剛開始的時候會有點不習慣的這種寫法,但是,當你真正的熟悉了之后,你一定會愛上這些新的...
摘要:大家好,我是樂字節的小樂,上一次我們說到了核心特性之函數式接口,接下來我們繼續了解又一核心特性方法引用。方法引用是一種更簡潔易懂的表達式。感謝光臨閱讀小樂的,敬請關注樂字節后續將繼續講述等前沿知識技術。 大家好,我是樂字節的小樂,上一次我們說到了Java8核心特性之函數式接口,接下來我們繼續了解Java8又一核心特性——方法引用。 showImg(https://segmentfaul...
摘要:上一篇小樂介紹了新特性函數式接口,大家可以點擊回顧。中引入方法引用新特性用于簡化應用對象方法的調用,方法引用是用來直接訪問類或者實例的已經存在的方法或者構造方法。方法引用是一種更簡潔易懂的表達式。 上一篇小樂介紹了《Java8新特性-函數式接口》,大家可以點擊回顧。這篇文章將接著介紹Java8新特性之方法引用。 Java8 中引入方法引用新特性,用于簡化應用對象方法的調用,?方法引用是...
摘要:方法引用在之前只能進行值傳遞,方法是不能傳遞的。首先方法接受了一個類型的對象,方法是獲取所有的文件,是用來存儲篩選之后的元素,循環所有獲得到的文件數組,然后調用中的方法來進行條件篩選,放入后返回。 方法引用: 在Java 8之前只能進行值傳遞,方法是不能傳遞的。如果你想調用一個方法你必須先獲取到它所在的類的實例,然后再通過實例去調用這個方法,但是Java 8新增了方法引用這個新特性可以...
閱讀 3724·2021-10-13 09:39
閱讀 3789·2021-09-24 09:48
閱讀 1189·2021-09-01 10:30
閱讀 2526·2019-08-30 15:55
閱讀 1774·2019-08-29 16:39
閱讀 2296·2019-08-26 13:55
閱讀 3050·2019-08-26 12:23
閱讀 1634·2019-08-26 11:59