亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

lambda表達(dá)式一,介紹

ybak / 3263人閱讀

摘要:體驗(yàn)的更優(yōu)寫法借助的全新語法,上述接口的匿名內(nèi)部類寫法可以通過更簡(jiǎn)單的表達(dá)式達(dá)到等效多線程任務(wù)執(zhí)行啟動(dòng)線程這段代碼和剛才的執(zhí)行效果是完全一樣的,可以在或更高的編譯級(jí)別下通過。

jdk8 2014年加入了lambda表達(dá)式
實(shí)例代碼

第三章 Lambda表達(dá)式 3.1 函數(shù)式編程思想概述

在數(shù)學(xué)中,函數(shù)就是有輸入量、輸出量的一套計(jì)算方案,也就是“拿什么東西做什么事情”。相對(duì)而言,面向?qū)ο筮^分強(qiáng)調(diào)“必須通過對(duì)象的形式來做事情”,而函數(shù)式思想則盡量忽略面向?qū)ο蟮膹?fù)雜語法——強(qiáng)調(diào)做什么,而不是以什么形式做。

面向?qū)ο蟮乃枷?

? 做一件事情,找一個(gè)能解決這個(gè)事情的對(duì)象,調(diào)用對(duì)象的方法,完成事情.

函數(shù)式編程思想:

? 只要能獲取到結(jié)果,誰去做的,怎么做的都不重要,重視的是結(jié)果,不重視過程

3.2 冗余的Runnable代碼 傳統(tǒng)寫法

當(dāng)需要啟動(dòng)一個(gè)線程去完成任務(wù)時(shí),通常會(huì)通過java.lang.Runnable接口來定義任務(wù)內(nèi)容,并使用java.lang.Thread類來啟動(dòng)該線程。代碼如下:

public class Demo01Runnable {
    public static void main(String[] args) {
        // 匿名內(nèi)部類
        Runnable task = new Runnable() {
            @Override
            public void run() { // 覆蓋重寫抽象方法
                System.out.println("多線程任務(wù)執(zhí)行!");
            }
        };
        new Thread(task).start(); // 啟動(dòng)線程
    }
}

本著“一切皆對(duì)象”的思想,這種做法是無可厚非的:首先創(chuàng)建一個(gè)Runnable接口的匿名內(nèi)部類對(duì)象來指定任務(wù)內(nèi)容,再將其交給一個(gè)線程來啟動(dòng)。

代碼分析

對(duì)于Runnable的匿名內(nèi)部類用法,可以分析出幾點(diǎn)內(nèi)容:

Thread類需要Runnable接口作為參數(shù),其中的抽象run方法是用來指定線程任務(wù)內(nèi)容的核心;

為了指定run的方法體,不得不需要Runnable接口的實(shí)現(xiàn)類;

為了省去定義一個(gè)RunnableImpl實(shí)現(xiàn)類的麻煩,不得不使用匿名內(nèi)部類;

必須覆蓋重寫抽象run方法,所以方法名稱、方法參數(shù)、方法返回值不得不再寫一遍,且不能寫錯(cuò);

而實(shí)際上,似乎只有方法體才是關(guān)鍵所在。

3.3 編程思想轉(zhuǎn)換 做什么,而不是怎么做

我們真的希望創(chuàng)建一個(gè)匿名內(nèi)部類對(duì)象嗎?不。我們只是為了做這件事情而不得不創(chuàng)建一個(gè)對(duì)象。我們真正希望做的事情是:將run方法體內(nèi)的代碼傳遞給Thread類知曉。

傳遞一段代碼——這才是我們真正的目的。而創(chuàng)建對(duì)象只是受限于面向?qū)ο笳Z法而不得不采取的一種手段方式。那,有沒有更加簡(jiǎn)單的辦法?如果我們將關(guān)注點(diǎn)從“怎么做”回歸到“做什么”的本質(zhì)上,就會(huì)發(fā)現(xiàn)只要能夠更好地達(dá)到目的,過程與形式其實(shí)并不重要。

生活舉例

當(dāng)我們需要從北京到上海時(shí),可以選擇高鐵、汽車、騎行或是徒步。我們的真正目的是到達(dá)上海,而如何才能到達(dá)上海的形式并不重要,所以我們一直在探索有沒有比高鐵更好的方式——搭乘飛機(jī)。

而現(xiàn)在這種飛機(jī)(甚至是飛船)已經(jīng)誕生:2014年3月Oracle所發(fā)布的Java 8(JDK 1.8)中,加入了Lambda表達(dá)式的重量級(jí)新特性,為我們打開了新世界的大門。

3.4 體驗(yàn)Lambda的更優(yōu)寫法

借助Java 8的全新語法,上述Runnable接口的匿名內(nèi)部類寫法可以通過更簡(jiǎn)單的Lambda表達(dá)式達(dá)到等效:

public class Demo02LambdaRunnable {
    public static void main(String[] args) {
        new Thread(() -> System.out.println("多線程任務(wù)執(zhí)行!")).start(); // 啟動(dòng)線程
    }
}

這段代碼和剛才的執(zhí)行效果是完全一樣的,可以在1.8或更高的編譯級(jí)別下通過。從代碼的語義中可以看出:我們啟動(dòng)了一個(gè)線程,而線程任務(wù)的內(nèi)容以一種更加簡(jiǎn)潔的形式被指定。

不再有“不得不創(chuàng)建接口對(duì)象”的束縛,不再有“抽象方法覆蓋重寫”的負(fù)擔(dān),就是這么簡(jiǎn)單!

3.5 回顧匿名內(nèi)部類

Lambda是怎樣擊敗面向?qū)ο蟮??在上例中,核心代碼其實(shí)只是如下所示的內(nèi)容:

() -> System.out.println("多線程任務(wù)執(zhí)行!")

為了理解Lambda的語義,我們需要從傳統(tǒng)的代碼起步。

使用實(shí)現(xiàn)類

要啟動(dòng)一個(gè)線程,需要?jiǎng)?chuàng)建一個(gè)Thread類的對(duì)象并調(diào)用start方法。而為了指定線程執(zhí)行的內(nèi)容,需要調(diào)用Thread類的構(gòu)造方法:

public Thread(Runnable target)

為了獲取Runnable接口的實(shí)現(xiàn)對(duì)象,可以為該接口定義一個(gè)實(shí)現(xiàn)類RunnableImpl

public class RunnableImpl implements Runnable {
    @Override
    public void run() {
        System.out.println("多線程任務(wù)執(zhí)行!");
    }
}

然后創(chuàng)建該實(shí)現(xiàn)類的對(duì)象作為Thread類的構(gòu)造參數(shù):

public class Demo03ThreadInitParam {
    public static void main(String[] args) {
        Runnable task = new RunnableImpl();
        new Thread(task).start();
    }
}
使用匿名內(nèi)部類

這個(gè)RunnableImpl類只是為了實(shí)現(xiàn)Runnable接口而存在的,而且僅被使用了唯一一次,所以使用匿名內(nèi)部類的語法即可省去該類的多帶帶定義,即匿名內(nèi)部類:

public class Demo04ThreadNameless {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("多線程任務(wù)執(zhí)行!");
            }
        }).start();
    }
}
匿名內(nèi)部類的好處與弊端

一方面,匿名內(nèi)部類可以幫我們省去實(shí)現(xiàn)類的定義;另一方面,匿名內(nèi)部類的語法——確實(shí)太復(fù)雜了!

語義分析

仔細(xì)分析該代碼中的語義,Runnable接口只有一個(gè)run方法的定義:

public abstract void run();

即制定了一種做事情的方案(其實(shí)就是一個(gè)函數(shù)):

無參數(shù):不需要任何條件即可執(zhí)行該方案。

無返回值:該方案不產(chǎn)生任何結(jié)果。

代碼塊(方法體):該方案的具體執(zhí)行步驟。

同樣的語義體現(xiàn)在Lambda語法中,要更加簡(jiǎn)單:

() -> System.out.println("多線程任務(wù)執(zhí)行!")

前面的一對(duì)小括號(hào)即run方法的參數(shù)(無),代表不需要任何條件;

中間的一個(gè)箭頭代表將前面的參數(shù)傳遞給后面的代碼;

后面的輸出語句即業(yè)務(wù)邏輯代碼。

3.6 Lambda標(biāo)準(zhǔn)格式

Lambda省去面向?qū)ο蟮臈l條框框,格式由3個(gè)部分組成:

一些參數(shù)

一個(gè)箭頭

一段代碼

Lambda表達(dá)式的標(biāo)準(zhǔn)格式為:

(參數(shù)類型 參數(shù)名稱) -> { 代碼語句 }

格式說明:

小括號(hào)內(nèi)的語法與傳統(tǒng)方法參數(shù)列表一致:無參數(shù)則留空;多個(gè)參數(shù)則用逗號(hào)分隔。

->是新引入的語法格式,代表指向動(dòng)作。

大括號(hào)內(nèi)的語法與傳統(tǒng)方法體要求基本一致。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75997.html

相關(guān)文章

  • 轉(zhuǎn) | Java8初體驗(yàn)(lambda達(dá)式語法

    摘要:初體驗(yàn)下面進(jìn)入本文的正題表達(dá)式。接下來展示表達(dá)式和其好基友的配合。吐槽一下方法引用表面上看起來方法引用和構(gòu)造器引用進(jìn)一步簡(jiǎn)化了表達(dá)式的書寫,但是個(gè)人覺得這方面沒有的下劃線語法更加通用。 感謝同事【天錦】的投稿。投稿請(qǐng)聯(lián)系 tengfei@ifeve.com 本文主要記錄自己學(xué)習(xí)Java8的歷程,方便大家一起探討和自己的備忘。因?yàn)楸救艘彩莿倓傞_始學(xué)習(xí)Java8,所以文中肯定有錯(cuò)誤和理解偏...

    Lucky_Boy 評(píng)論0 收藏0
  • 深入淺出 Java 8 Lambda 達(dá)式

    摘要:在支持一類函數(shù)的語言中,表達(dá)式的類型將是函數(shù)。匿名函數(shù)的返回類型與該主體表達(dá)式一致如果表達(dá)式的主體包含一條以上語句,則表達(dá)式必須包含在花括號(hào)中形成代碼塊。注意,使用表達(dá)式的方法不止一種。 摘要:此篇文章主要介紹 Java8 Lambda 表達(dá)式產(chǎn)生的背景和用法,以及 Lambda 表達(dá)式與匿名類的不同等。本文系 OneAPM 工程師編譯整理。 Java 是一流的面向?qū)ο笳Z言,除了部分簡(jiǎn)...

    wdzgege 評(píng)論0 收藏0
  • Java8新特性第1章(Lambda達(dá)式)

    摘要:一表達(dá)式匿名內(nèi)部類最大的問題在于其冗余的語法,比如前面的中五行代碼僅有一行是在執(zhí)行任務(wù)??偨Y(jié)基于詞法作用域的理念,表達(dá)式不可以掩蓋任何其所在上下文的局部變量。 轉(zhuǎn)載請(qǐng)注明出處:https://zhuanlan.zhihu.com/p/20540175 在介紹Lambda表達(dá)式之前,我們先來看只有單個(gè)方法的Interface(通常我們稱之為回調(diào)接口): public interface...

    ningwang 評(píng)論0 收藏0
  • Java8-1-初識(shí)Lambda達(dá)式與函數(shù)式接口

    摘要:而在中,表達(dá)式是對(duì)象,它們必須依附于一類特別的對(duì)象類型函數(shù)式接口。即表達(dá)式返回的是函數(shù)式接口類型。 Java8被稱作Java史上變化最大的一個(gè)版本。其中包含很多重要的新特性,最核心的就是增加了Lambda表達(dá)式和Stream API。這兩者也可以結(jié)合在一起使用。首先來看下什么是Lambda表達(dá)式。Lambda表達(dá)式,維基百科上的解釋是一種用于表示匿名函數(shù)和閉包的運(yùn)算符,感覺看到這個(gè)解釋...

    jzman 評(píng)論0 收藏0
  • Java Lambda 達(dá)式(又名閉包 (Closure)/ 匿名函數(shù) ) 筆記

    摘要:表達(dá)式又名閉包匿名函數(shù)筆記根據(jù)終于在中引入了表達(dá)式。函數(shù)式接口要介紹中表達(dá)式的實(shí)現(xiàn),需要知道什么是函數(shù)式接口。但同樣需要保證外部的自由變量不能在表達(dá)式中被改變。 Java Lambda 表達(dá)式(又名閉包 (Closure)/ 匿名函數(shù) ) 筆記 根據(jù) JSR 335, Java 終于在 Java 8 中引入了 Lambda 表達(dá)式。也稱之為閉包或者匿名函數(shù)。 showImg(https...

    fou7 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<