成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Java8新特性之Lambda表達(dá)式

mist14 / 975人閱讀

摘要:表達(dá)式說(shuō)白了就是一種匿名方法,不需要方法名,修飾符,和返回值類型。就目前而言表達(dá)式只能簡(jiǎn)化接口的匿名內(nèi)部類實(shí)現(xiàn)。

Lambda表達(dá)式說(shuō)白了就是一種匿名方法,不需要方法名,修飾符,和返回值類型。

使用方法

首先在moudle的build.gradle文件中添加配置:app/build.gradle添加。

android {
        ...
        defaultConfig {
        ...
        jackOptions.enabled=true;
    }
    compileOptions{
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    ...
}

就這樣配置就OK了;

接下來(lái)我們來(lái)看看怎么使用;

首先拿一個(gè)點(diǎn)擊事件來(lái)比對(duì)一下:
一般寫(xiě)法

button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            
        }
    });

解說(shuō):這是一種匿名內(nèi)部類的寫(xiě)法,較之外部類的寫(xiě)法已經(jīng)算是很簡(jiǎn)潔了。

Lambda表達(dá)式*

button.setOnClickListener(view ->{

        
    });

解說(shuō):不難發(fā)現(xiàn),Lambda的這種寫(xiě)法連匿名內(nèi)部類都不用寫(xiě)了,更加簡(jiǎn)潔了,直接將參數(shù)暴露在外,在方法體中可以直接調(diào)用該參數(shù);如果沒(méi)有參數(shù)就用()就行,例如開(kāi)啟線程的寫(xiě)法:

new Thread(() -> {

        });

到這里大家可能就要說(shuō)了:不就是少了兩行代碼,有什么了不起,學(xué)的時(shí)候還不是要從匿名內(nèi)部類寫(xiě)起?

那再用在點(diǎn)擊事件中開(kāi)啟一個(gè)線程的:
一般寫(xiě)法

button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            new Thread(new Runnable() {
                @Override
                public void run() {

                }
            });
        }
    });

看起來(lái)是不是有點(diǎn)眼花繚亂,很明顯的onClick等方法有點(diǎn)搶鏡,讓run方法不是那么容易被發(fā)現(xiàn);

Lambda表達(dá)式

button.setOnClickListener( view-> new Thread(() -> {
    
        }));

怎么樣,是不是被驚艷到了,服不服??Lambda就是這么簡(jiǎn)潔,簡(jiǎn)潔到?jīng)]朋友。

可能有朋友就奇怪怎么寫(xiě)一起了,不該是兩個(gè)分開(kāi)的Lambda表達(dá)式嗎?

  button.setOnClickListener(view -> {
            new Thread(() -> {

            });
        });

帶著這個(gè)疑問(wèn)我們從源頭找起,來(lái)看看Lambda表達(dá)式到底簡(jiǎn)化了什么?
從上面我們不難發(fā)現(xiàn),Lambda表達(dá)式的簡(jiǎn)化,其實(shí)是簡(jiǎn)化了接口的匿名內(nèi)部類的實(shí)現(xiàn):

 //一般寫(xiě)法
        View.OnClickListener listener=new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                
            }
        };
        //Lambda表達(dá)式
        View.OnClickListener listener= view -> {

        };

我們發(fā)現(xiàn)Lambda簡(jiǎn)化了OnClickListener這個(gè)接口的匿名實(shí)現(xiàn)和一個(gè)必須實(shí)現(xiàn)的方法,只留下一個(gè)參數(shù)。

那么 現(xiàn)在我們有了如下疑問(wèn)?

Lambda表達(dá)式只能簡(jiǎn)化接口的匿名實(shí)現(xiàn)嗎?
Lambda表達(dá)式能簡(jiǎn)化多個(gè)方法的接口的匿名實(shí)現(xiàn)嗎?
Lambda表達(dá)式能簡(jiǎn)化方法里有多個(gè)參數(shù)的接口嗎?
Lambda表達(dá)式能簡(jiǎn)化方法帶有返回值的接口嗎?
下面來(lái)一一解答:

Lambda表達(dá)式只能簡(jiǎn)化接口的匿名實(shí)現(xiàn)嗎?

答案是肯定的。

就目前而言Lambda表達(dá)式只能簡(jiǎn)化接口的匿名內(nèi)部類實(shí)現(xiàn)。
原因大概是:接口是沒(méi)有構(gòu)造方法,而抽象類和一般的類是有構(gòu)造方法的;接口里的方法沒(méi)有方法體等等。因?yàn)榻涌诘奶厥庑?,Lambda表達(dá)式就是只針對(duì)接口而已。
Lambda表達(dá)式能簡(jiǎn)化多個(gè)方法的接口的匿名實(shí)現(xiàn)嗎?

答案是不能:這里從Lambda的表達(dá)式就可以看出來(lái),已經(jīng)簡(jiǎn)化到?jīng)]有沒(méi)有一絲多余的代碼,多個(gè)方法怎么寫(xiě)呢。

Lambda只能簡(jiǎn)化單一方法接口的匿名內(nèi)部類實(shí)現(xiàn);
Lambda表達(dá)式能簡(jiǎn)化多個(gè)參數(shù)的單一方法接口嗎?

這個(gè)答案是肯定的。

前面我在例子中已經(jīng)用到了沒(méi)有參數(shù)和一個(gè)參數(shù)的接口匿名實(shí)現(xiàn)。

沒(méi)有參數(shù)一個(gè)空的小括號(hào);
一個(gè)參數(shù)在括號(hào)里面添加一個(gè)參數(shù),
多個(gè)參數(shù)就直接添加就OK了;
一個(gè)參數(shù)時(shí)小括號(hào)是可以省略的;
另外參數(shù)類型是可以省略的,當(dāng)然也就可以寫(xiě)的;
省略括號(hào)時(shí)是不能寫(xiě)參數(shù)類型的。

 //沒(méi)有參數(shù)
        Runnable runnable=() -> {

        };

        //一個(gè)參數(shù)
        View.OnClickListener listener= (View view) -> {

        };
        View.OnClickListener listener= (view) -> {
                  //參數(shù)類型可省略
        };
       View.OnClickListener listener= view -> {
                  //括號(hào)可省略,但不能添加參數(shù)
        };

        //兩個(gè)參數(shù)
        public interface JackListener{
               void check(String string,String check);
        };
        doWhat("jack666", (string, check) -> {
                //這里的兩個(gè)參數(shù)指的是接口里方法的參數(shù),而不是doWhat的參數(shù)哦
        });

Lambda表達(dá)式能簡(jiǎn)化方法帶有返回值的接口嗎?

答案是肯定的,其實(shí)返回值和簡(jiǎn)化前的寫(xiě)法是一樣,return一下就可以了。示例如下;

//兩個(gè)參數(shù)
        public interface JackListener{
            boolean check(String string,String check);
        };
        doWhat("jack666", (string, check) -> {
            boolean result=string.contains(check);
            Toast.makeText(MainActivity.this, ""+result, Toast.LENGTH_SHORT).show();
            return result;
        });

現(xiàn)在咱們?cè)賮?lái)看看前面的兩個(gè)Lambda嵌套時(shí)發(fā)生了化學(xué)反應(yīng):

button.setOnClickListener(view -> {
            new Thread(() -> {

            });
        });
        //兩個(gè)Lambda表達(dá)式嵌套,極簡(jiǎn)模式
        button.setOnClickListener( view-> new Thread(() -> {
            //前提是Lambda表達(dá)式中的方法體內(nèi)部只有一個(gè)單純Lambda表達(dá)式
        }));
        //四個(gè)Lambda表達(dá)式嵌套,CRAZY!!!
        button.setOnClickListener(view -> new Thread(() -> button.setOnClickListener(view1 -> new Thread(() -> {
           
        }))));

從Lambda表達(dá)式開(kāi)始等于開(kāi)啟了Java的極簡(jiǎn)模式,期待下個(gè)版本會(huì)有更多的簡(jiǎn)化,祝福Java在簡(jiǎn)化這條路上越走越遠(yuǎn),讓嘲笑Java臃腫的人去屎!

歡迎加入學(xué)習(xí)交流群569772982,大家一起學(xué)習(xí)交流。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67773.html

相關(guān)文章

  • 樂(lè)字節(jié)-Java8特性方法引用

    摘要:上一篇小樂(lè)介紹了新特性函數(shù)式接口,大家可以點(diǎn)擊回顧。中引入方法引用新特性用于簡(jiǎn)化應(yīng)用對(duì)象方法的調(diào)用,方法引用是用來(lái)直接訪問(wèn)類或者實(shí)例的已經(jīng)存在的方法或者構(gòu)造方法。方法引用是一種更簡(jiǎn)潔易懂的表達(dá)式。 上一篇小樂(lè)介紹了《Java8新特性-函數(shù)式接口》,大家可以點(diǎn)擊回顧。這篇文章將接著介紹Java8新特性之方法引用。 Java8 中引入方法引用新特性,用于簡(jiǎn)化應(yīng)用對(duì)象方法的調(diào)用,?方法引用是...

    Codeing_ls 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8特性-Lambda達(dá)式

    摘要:很多語(yǔ)言等從設(shè)計(jì)之初就支持表達(dá)式。注意此時(shí)外部局部變量將自動(dòng)變?yōu)樽鳛榉椒ǚ祷刂道臃祷嘏袛嘧址欠駷榭张袛嘧址欠駷榭战裉礻P(guān)于新特性表達(dá)式就講到這里了,接下來(lái)我會(huì)繼續(xù)講述新特性之函數(shù)式接口。 上一篇文章我們了解了Java8新特性-接口默認(rèn)方法,接下來(lái)我們聊一聊Java8新特性之Lambda表達(dá)式。 Lambda表達(dá)式(也稱為閉包),它允許我們將函數(shù)當(dāng)成參數(shù)傳遞給某個(gè)方法,或者把代碼...

    gggggggbong 評(píng)論0 收藏0
  • 樂(lè)字節(jié)Java8核心特性實(shí)戰(zhàn)方法引用

    摘要:大家好,我是樂(lè)字節(jié)的小樂(lè),上一次我們說(shuō)到了核心特性之函數(shù)式接口,接下來(lái)我們繼續(xù)了解又一核心特性方法引用。方法引用是一種更簡(jiǎn)潔易懂的表達(dá)式。感謝光臨閱讀小樂(lè)的,敬請(qǐng)關(guān)注樂(lè)字節(jié)后續(xù)將繼續(xù)講述等前沿知識(shí)技術(shù)。 大家好,我是樂(lè)字節(jié)的小樂(lè),上一次我們說(shuō)到了Java8核心特性之函數(shù)式接口,接下來(lái)我們繼續(xù)了解Java8又一核心特性——方法引用。 showImg(https://segmentfaul...

    lakeside 評(píng)論0 收藏0
  • Java8 lambda 達(dá)式、方法引用、函數(shù)式接口、默認(rèn)方式、靜態(tài)方法

    摘要:歐陽(yáng)思海繼承接口后,又加了新的抽象方法,這個(gè)接口就不再是函數(shù)式接口默認(rèn)方法在接口中添加了一個(gè)默認(rèn)方法。總結(jié)在這篇文章中,我們講了表達(dá)式方法引用函數(shù)式接口接口中的靜態(tài)方法接口中的默認(rèn)方法的使用。 今天我來(lái)聊聊 Java8 的一些新的特性,確實(shí) Java8 的新特性的出現(xiàn),給開(kāi)發(fā)者帶來(lái)了非常大的便利,可能剛剛開(kāi)始的時(shí)候會(huì)有點(diǎn)不習(xí)慣的這種寫(xiě)法,但是,當(dāng)你真正的熟悉了之后,你一定會(huì)愛(ài)上這些新的...

    isLishude 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8特性函數(shù)式接口

    摘要:上一篇小樂(lè)帶大家學(xué)過(guò)新特性表達(dá)式,什么時(shí)候可以使用通常表達(dá)式是用在函數(shù)式接口上使用的。使用實(shí)現(xiàn)創(chuàng)建產(chǎn)生一個(gè)工廠對(duì)象以上就是小樂(lè)帶給大家的新特性之函數(shù)式接口,下一篇將會(huì)為大家?guī)?lái)新特性之方法引用,敬請(qǐng)關(guān)注。 上一篇小樂(lè)帶大家學(xué)過(guò) Java8新特性-Lambda表達(dá)式,什么時(shí)候可以使用Lambda?通常Lambda表達(dá)式是用在函數(shù)式接口上使用的。從Java8開(kāi)始引入了函數(shù)式接口,其說(shuō)明比較...

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

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

0條評(píng)論

閱讀需要支付1元查看
<