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

資訊專欄INFORMATION COLUMN

你還不懂Lambda嗎!

MAX_zuo / 3350人閱讀

摘要:函數(shù)式接口可以包含多個(gè)默認(rèn)方法類方法但只能一個(gè)抽象方法函數(shù)式接口有且只有一個(gè)沒有關(guān)鍵字修飾的接口可以多個(gè)關(guān)鍵字的抽象方法類方法變量語法組成元素形參列表。

Lambda相當(dāng)于就是一個(gè)匿名方法,其在代替匿名內(nèi)部類創(chuàng)建對(duì)象的時(shí)候,Lambda表達(dá)式代碼塊會(huì)代替實(shí)現(xiàn)抽象方法的方法體

Lambda表達(dá)式的目標(biāo)類型必須是“函數(shù)式接口(FunctionalInterface)”。函數(shù)式接口只能包含一個(gè)抽象方法接口。函數(shù)式接口可以包含多個(gè)默認(rèn)方法、類方法、但只能一個(gè)抽象方法

函數(shù)式接口

有且只有一個(gè)沒有default關(guān)鍵字修飾的接口

可以多個(gè)default關(guān)鍵字的抽象方法、類方法、變量

語法組成元素

形參列表。形參可以省略數(shù)據(jù)類型。若只有一個(gè)參數(shù),可以將圓括號(hào)省略

箭頭(->)

代碼塊。如果只有一條語句,Lambda表達(dá)式可以省略花括號(hào)。代碼塊只能有一條return語句,并且可以省略return關(guān)鍵字

public class Lam {
    @FunctionalInterface
    interface Try{
        Integer ss();
    }
    public static void main(String[] args) {
        Try i=()->"sa".indexOf("a");
        System.out.println(i.ss());
    }
}

Lambda的代碼塊中就是用來實(shí)現(xiàn)接口的抽象方法,而且有且只能有一個(gè)。若有default關(guān)鍵字的抽象方法是不屬于函數(shù)式接口(FunctionalInterface)

存在@FunctionalInterface注解的一定是函數(shù)式接口,沒有@FunctionalInterface不一定就不是函數(shù)式接口

public class Lam {
    @FunctionalInterface
    interface Try {
        String s = "1";
        Integer ss();
        default Integer bb() {
            return 0;
        }

    }

    public static void main(String[] args) {
        Try i = () -> "sa".indexOf("a");
        System.out.println(i.s);
        System.out.println(i.ss());
    }
}
方法引用與構(gòu)造器引用
種類 示例 說明 對(duì)應(yīng)的Lambda表達(dá)式
引用類方法 類名::類方法 函數(shù)式接口中實(shí)現(xiàn)的方法的全部參數(shù)都傳遞給類方法作為參數(shù) (a,b,...)->類名.類方法(a,b,...)
特定對(duì)象的實(shí)例方法 對(duì)象::實(shí)例方法 函數(shù)式接口中實(shí)現(xiàn)的方法的全部參數(shù)都傳遞給類方法作為參數(shù) (a,b,...)->對(duì)象.實(shí)例方法(a,b,...)
引用某類對(duì)象的實(shí)例方法 類名::實(shí)例方法 函數(shù)式接口中實(shí)現(xiàn)的方法第一個(gè)參數(shù)作為調(diào)用者,之后的參數(shù)都作為方法的參數(shù) (a,b,...)->a.實(shí)例方法(b,...)
引用構(gòu)造方法 類名::new 函數(shù)式接口中實(shí)現(xiàn)的方法的全部參數(shù)都傳遞給類方法作為參數(shù) (a,b,...)->類名.new(a,b,...)

使用::這種方式,抽象方法肯定是存在參數(shù)的

其實(shí)上面三類可以歸為一類來看待,這是形式不同而已

public class Lam {
    @FunctionalInterface
    interface Try {
        String s = "1";
        Integer ss(String s);
        default Integer sb() {
            return 0;
        }

    }

    public static void main(String[] args) {
        Try i = "sa"::indexOf;
        System.out.println(i.s);
        System.out.println(i.ss("a"));
    }

引用構(gòu)造方法

public class Lam {
    @FunctionalInterface
    interface Try {
        String s = "1";
        String ss(String s);
        default Integer sb() {
            return 0;
        }

    }

    public static void main(String[] args) {
        Try i = String::new;
        System.out.println(i.s);
        System.out.println(i.ss("a"));
    }

等價(jià)于

public class Lam {
    @FunctionalInterface
    interface Try {
        String s = "1";
        String ss(String s);
        default Integer sb() {
            return 0;
        }

    }

    public static void main(String[] args) {
        Try i = new Try(){
            @Override
            public String ss(String s) {
                return new String(s);
            }
            
        };
        System.out.println(i.s);
        System.out.println(i.ss("a"));
    }
Lambda表達(dá)式與匿名函數(shù)的異同點(diǎn)

Lambda表達(dá)式與匿名內(nèi)部類一樣,都可以直接訪問“effectivly final”的局部變量,以及外部類的成員變量(包括實(shí)例變量和類變量)

Lambda表達(dá)式創(chuàng)建的對(duì)象與匿名內(nèi)部類生成的對(duì)象一樣,都可以直接調(diào)用從接口中繼承的默認(rèn)方法

匿名內(nèi)部類可以為任意接口創(chuàng)建實(shí)例——不管接口包含多少抽象方法,只要匿名內(nèi)部類實(shí)現(xiàn)所有的抽象方法即可;但Lambda表達(dá)式只能為函數(shù)式接口創(chuàng)建實(shí)例

匿名內(nèi)部類可以為抽象類甚至普通類創(chuàng)建實(shí)例;但Lambda表達(dá)式只能為函數(shù)式接口創(chuàng)建實(shí)例

匿名內(nèi)部類實(shí)現(xiàn)的抽象方法的方法體運(yùn)行調(diào)用接口中定義的默認(rèn)方法;但Lambda表達(dá)式的代碼塊不允許調(diào)用接口中定義的默認(rèn)方法

更多內(nèi)容可以關(guān)注微信公眾號(hào),或者訪問AppZone網(wǎng)站

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

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

相關(guān)文章

  • 使用Intellij IDEA 解決Java8的數(shù)據(jù)流問題

    摘要:使用解決的數(shù)據(jù)流問題原文譯者飛龍協(xié)議在年三月發(fā)布,距離現(xiàn)在年三月五號(hào)快有一年了。除了,最實(shí)用的特性是新的數(shù)據(jù)流。是吧,注是瀏覽器上的數(shù)據(jù)流的接口,并解決了上述問題。 使用Intellij IDEA 解決Java8的數(shù)據(jù)流問題 原文:Fixing Java 8 Stream Gotchas with IntelliJ IDEA 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 ...

    dreamGong 評(píng)論0 收藏0
  • 使用 Authing + Lambda 替代 AWS Cognito

    摘要:編寫函數(shù)編寫函數(shù)推薦使用這個(gè),控制臺(tái)中的函數(shù)編寫堪稱讓人痛不欲生。在控制臺(tái)中安裝在中引入包后會(huì)一起打包上傳到運(yùn)行時(shí)中。 Amazon Web Services(AWS) 雖然作為市場(chǎng)份額全球第一的云計(jì)算廠商,其產(chǎn)品也不是完美無缺的,Cognito (AWS 的身份認(rèn)證解決方案)及其附帶的中文文檔就是一個(gè)反面教材,其難用程度令人發(fā)指。當(dāng)然,除了不易用之外,還有訪問速度緩慢,不適用于中國市...

    Vultr 評(píng)論0 收藏0
  • 《Java8實(shí)戰(zhàn)》-第三章讀書筆記(Lambda表達(dá)式-01)

    摘要:之前,使用匿名類給蘋果排序的代碼是的,這段代碼看上去并不是那么的清晰明了,使用表達(dá)式改進(jìn)后或者是不得不承認(rèn),代碼看起來跟清晰了。這是由泛型接口內(nèi)部實(shí)現(xiàn)方式造成的。 # Lambda表達(dá)式在《Java8實(shí)戰(zhàn)》中第三章主要講的是Lambda表達(dá)式,在上一章節(jié)的筆記中我們利用了行為參數(shù)化來因?qū)Σ粩嘧兓男枨?,最后我們也使用到了Lambda,通過表達(dá)式為我們簡化了很多代碼從而極大地提高了我們的...

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

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

0條評(píng)論

閱讀需要支付1元查看
<