1. 程式人生 > >Java8 方法引用

Java8 方法引用

value 簡寫 表達 函數 關於 aaaaa 構造方法 形式 數列

概述
方法引用是用來直接訪問類或實例×××存在的方法或者構造方法.它需要由兼容的函數式接口(lambda表達式中用到的接口)構成的目標類型上下文. 有時候, 當我們想要實現一個函數式接口的方法, 但是已經由類實現了我們想要的功能, 這時可以使用方法引用來直接使用現有的功能實現.

關於lambda表達式可以看這篇文章Java8 Lambda表達式

當lambda表達式只是執行一個方法調用時, 直接通過方法引用的形式調用. 方法引用是一種更簡潔的lambda表達式.

方法引用是lambda表達式的簡寫, 提高了代碼可讀性. 可以看出來, 方法引用就是用已經實現的方法來實現lambda表達式中的實現, 所以引用的方法要滿足以下要求:

引用的方法的參數列表必須與實現的抽象方法參數列表保持一致.
使用
因為方法引用是簡寫的lambda表達式, 所以類比即可.

方法引用的語法為:

類或對象名::方法名或new
通過引用即可引用指定類或對象的指定方法

分類
下面介紹以下幾種不同的方法引用.

1.靜態方法引用

顧名思義, 靜態方法引用就是引用類的靜態方法, 語法為:

類名::靜態方法名
方法引用與lambda表達式:

String::valueOf 等價於 s -> String.valueOf(s);
Math::pow 等價於 (x,y) -> Math.pow(x,y);
Java8 方法引用

2.實例方法引用

顧名思義,實例方法引用就是引用對象實例的方法, 語法為:

對象實例::方法名
方法引用與lambda表達式:

String str = "aaaaaaaaaaa";
// 若實例方法要通過對象來調用, 第一個參數會成為調用實例方法的對象, 後面的參數為調用方法的參數
String::length 等價於lambda表達式 s -> s.length();
String::equals 等價於lambda表達式 (s1,s2) -> s1.equals(s2);
// 若實例方法為this或super, 參數會成為調用方法的參數
this::equals 等價於lambda表達式 s -> this.equals(s);
super::equals 等價於lambda表達式 s -> super.equals(s);

Java8 方法引用

3.構造方法引用

顧名思義, 構造方法引用就是引用類的構造方法, 語法為:

類名::new
方法引用與lambda表達式:

// 會根據參數尋找合適的構造方法
String::new 等價於lambda表達式 s->new String(s);
也等價於 ()->new String();
// 同時也可以創建數組
int[]::new 等價於lambda表達式 x->new int[x];
Java8 方法引用 歡迎工作一到五年的Java工程師朋友們加入Java群: 891219277
群內提供免費的Java架構學習資料(裏面有高可用、高並發、高性能及分布式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

Java8 方法引用