本篇內(nèi)容主要講解“Java中::符號的作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中::符號的作用是什么”吧!
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、響應(yīng)式網(wǎng)站設(shè)計、程序開發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、微信小程序開發(fā)等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站設(shè)計制作、成都做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等多方位專業(yè)化運作于一體。
Java中的方法引用,很多同學都見過但卻叫不出名字,在這篇文章中,我們將看到什么是方法引用以及如何使用它。
我們先來看看方法引用的使用:
new Random().ints(10) .map(i->Math.abs(i)) .forEach(i -> System.out.println(i));
這里我們隨機生成10個整數(shù)然后取它們絕對值并一一打印出來。寫法是沒有問題的,但是還是可以再簡化的。
map方法接受的是一個函數(shù)式接口IntUnaryOperator,那么上面代碼中的i->Math.abs(i)實際上是:
new IntUnaryOperator() { @Override public int applyAsInt(int operand) { return Math.abs(operand); } }
從上面來看IntUnaryOperator就是代理了Math.abs(int i),參數(shù)列表、返回值都相同,而且沒有摻雜其它額外的邏輯。這一點非常重要,不摻雜其它邏輯才能相互代替。那么就可以通過方法引用來簡化Lambda 表達式。上面的式子就可以簡化為:
new Random().ints(10) .map(Math::abs) .forEach(System.out::println);
Java 方法引用是Java 8隨著Lambda表達式引入的新特性。 可以直接引用已有Java類或?qū)ο蟮姆椒ɑ驑?gòu)造器。方法引用通常與Lambda表達式結(jié)合使用以簡化代碼。其使用條件是:Lambda表達式的主體僅包含一個表達式,且Lambda表達式只調(diào)用了一個已經(jīng)存在的方法;被引用的方法的參數(shù)列表和返回值與Lambda表達式的輸入輸出一致。
方法引用的格式為
引用方式說明靜態(tài)方法引用ClassName :: staticMethodName 例如上面的Math::abs構(gòu)造器引用ClassName :: new 例如通過Supplier
大部分人認為Lambda 表達式存在閱讀困難的問題,其實不然,這種流水線的結(jié)構(gòu)恰恰增加了可讀性,每一個Lambda 表達式都可以看作一個執(zhí)行策略,方法引用反而讓你能更加清楚執(zhí)行了什么策略。另外我經(jīng)常見到類似如下的流式寫法:
new Random().ints(10) .map(operand -> { System.out.println("operand = " + operand); return operand+1; }) .forEach(System.out::println);
這種"大肚子"寫法的風格是不建議在函數(shù)式編程中出現(xiàn)的。最好單獨提出來封裝做方法引用,寫成下面的風格:
public void randomInt() { new Random().ints(10) .map(this::selfIncreasing) .forEach(System.out::println); } // 封裝 private int selfIncreasing(int self){ System.out.println("self = " + self); return self+1; }
這樣反而可讀性很強,隨機取10個數(shù),然后每個數(shù)走個自增并分別打印出來。
方法引用實現(xiàn)在特定場景下Lambda表達式的簡化表示,目的在于讓代碼更加簡潔。但是習慣了傳統(tǒng)Java編程風格的同學上來會不太適應(yīng),希望借助于本文能幫助你解決這個問題。
到此,相信大家對“Java中::符號的作用是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!