<delect id="ztpvj"></delect>
        <noframes id="ztpvj">

      <del id="ztpvj"><strike id="ztpvj"></strike></del>
      <noframes id="ztpvj">

      <rp id="ztpvj"></rp>

        <big id="ztpvj"></big>

          <video id="ztpvj"></video>
        <big id="ztpvj"><address id="ztpvj"><progress id="ztpvj"></progress></address></big>

          成都java開發培訓
          達內成都高升橋中心

          15023458194

          成都java程序員培訓:方法引用

          • 時間:2020-12-22 11:36
          • 發布:成都達內
          • 來源:成都達內

          在JDK1.8中,方法引用同Lambda表達式一齊作為新特性被引用。它是一種比Lambda表達式更加簡便的書寫方式,旨在使用通用的解決方案來減少代碼冗余。

          下面先介紹使用,再進一步思考。

          一、書寫格式

          方法引用符:::,它所在的表達式被稱為方法引用

          格式:引用類::引用的方法示例:System.out::println二、使用方式

          下面通過使用方式來認識方法引用

          1.引用類方法

          引用類方法,即引用類的靜態方法。

          格式:類名::靜態方法示例:

          以引用Integer.parseInt為例。設存在一個接口Interface01,其中只包含一個抽象方法,希望實現類可以實現將傳入的字符串轉換為int類型。

          public interface Interface01 {

          int toInt(String s);

          }

          在測試方法seeInt中,使用了該接口的toInt方法

          private static void seeInt(Interface01 i){

          int i1 = i.toInt("666");

          //通過運算符,可以在調用后通過輸出結果看出 i1 是String還是int

          System.out.println(i1+222);

          }

          現在使用測試類來提供接口的實現。此處提供三種實現方式以便于比較

          public class Demo1 {

          public static void main(String[] args) {

          //我們常用Integer.parseInt來實現將String轉換為int

          //匿名內部類方式。

          seeInt(new Interface01() {

          @Override

          public int toInt(String s) {

          return Integer.parseInt(s);

          }

          });

          //Lambda表達式

          seeInt(s -> Integer.parseInt(s));

          //方法引用。

          //引用Integer類中的parseInt靜態方法

          seeInt(Integer::parseInt);

          }

          private static void seeInt(Interface01 i){

          int i1 = i.toInt("666");

          //通過運算符,可以在調用后通過輸出結果看出 i1 是String還是int

          System.out.println(i1+222);

          }

          }

          得到輸出結果

          888

          888

          888

          在該例中,將String轉換為int已經有一個成熟的解決方案,即Integer.parseInt。所以直接引用了該方法。此時,Integer.parseInt就是Interface01接口中toInt抽象方法的具體實現

          此時出現一個疑問,引用的這個方法是怎么處理參數的?

          我們可以對比一下:

          toInt方法需要一個入參(String),返回一個出參(int)

          Integer.parseInt重載中存在一個方法是 需要一個入參(String),返回一個出參(int)

          此時兩者可以對應上,編譯器將自動處理傳參問題。

          2.引用對象的實例方法

          引用對象的實例方法。和引用類的靜態方法在使用上沒有什么區別只是將類變更為對象。注意:對象需要實例化

          格式:對象名::方法名示例:

          public class Demo3 {

          public static void main(String[] args) {

          //引用對象的實例方法。和靜態方法沒有使用上的區別只是要new一下

          Demo3 demo3 = new Demo3();

          useInterface(demo3::method1);

          }

          private static void useInterface(Interface03 i){

          i.abMethod1();

          }

          public void method1(){

          System.out.println("111");

          System.out.println("222");

          System.out.println("333");

          }

          }

          interface Interface03 {

          void abMethod1();

          }

          3.特殊類型的實例方法

          java中存在某些特殊方法。

          以"".subString([start],[end])為例,它在使用時需要三個參數,即

          被截取的字符串(“”)

          截取的開始下標([start])

          截取的結束下標([end])

          示例:使用Lambda和方法引用使用格式為:

          public static void main(String[] args) {

          //lambda

          testInterface((s,start,end) -> s.substring(start,end));

          /*

          方法引用

          第一個參數作為方法調用者

          后面的參數作為方法的參數

          */

          testInterface(String::substring);

          }

          4.構造方法引用

          直接上代碼演示

          格式:類名::new示例:

          public static void main(String[] args) {

          //Lambda

          seeStudent((name,age) -> {

          return new Student(name,age);

          });

          //方法引用 他的形式參數全部傳遞給構造器

          seeStudent(Student::new);

          }

          思考

          學習一個新知識的時候,我總有這樣的疑問:為什么要學它,什么時候去用它,怎么用它呢?(這個和高中作文的議論文格式一樣...看來學議論文還是有幫助的=。=)

          所以此處的問題是:為什么需要方法引用,什么時候使用方法引用呢?

          在方法引用的學習時,我產生了這樣的思考

          當接口只需要實現一次 -> 使用匿名內部類

          作為匿名內部類的簡便寫法 -> 使用Lambda表達式

          當Lambda的實現存在通用解決方案 -> 使用方法引用

          當”一個接口/類的方法的某個實現方式在程序中只會執行一次“時,為了減少代碼量,我們會使用匿名內部類。

          而使用方法引用會引用一個通用解決方案,此時該解決方案就不屬于”只使用一次”的了。

          換言之,

          當程序中使用到接口,接口在某個類中已存在實現方式,就可以考慮使用“方法引用”的方式來簡化書寫

          總結:

          方法引用是Lambda的一種簡便寫法

          使用方法引用可以減少重復代碼,減少冗余

          上一篇:成都java程序員學習:一個bug來理解Spring單例
          下一篇:成都java培訓機構:微服務之間是如何獨立通訊的

          成都java程序員學習:一個bug來理解Spring單例

          成都java程序員學習:Java的橋接方法

          成都java程序員培訓:正則表達式筆記

          成都java程序員:java中將list轉換為用逗號隔開的字符串、逗號拼接字符串

          • 關注微信公眾號

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          江西省

          貴州省

          廣西省

          海南省

          偷拍初高中女厕所视频,小草视频免费高清在线播放,国产日韩欧美不卡在线二区,亚洲中文字幕码在线电影