成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

mist14 / 932人閱讀

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

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

使用方法

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

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

就這樣配置就OK了;

接下來我們來看看怎么使用;

首先拿一個點擊事件來比對一下:
一般寫法

button.setOnClickListener(new View.OnClickListener() {

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

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

Lambda表達(dá)式*

button.setOnClickListener(view ->{

        
    });

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

new Thread(() -> {

        });

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

那再用在點擊事件中開啟一個線程的:
一般寫法

button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

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

                }
            });
        }
    });

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

Lambda表達(dá)式

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

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

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

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

            });
        });

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

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

        };

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

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

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

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

答案是肯定的。

就目前而言Lambda表達(dá)式只能簡化接口的匿名內(nèi)部類實現(xiàn)。
原因大概是:接口是沒有構(gòu)造方法,而抽象類和一般的類是有構(gòu)造方法的;接口里的方法沒有方法體等等。因為接口的特殊性,Lambda表達(dá)式就是只針對接口而已。
Lambda表達(dá)式能簡化多個方法的接口的匿名實現(xiàn)嗎?

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

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

這個答案是肯定的。

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

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

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

        };

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

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

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

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

答案是肯定的,其實返回值和簡化前的寫法是一樣,return一下就可以了。示例如下;

//兩個參數(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)在咱們再來看看前面的兩個Lambda嵌套時發(fā)生了化學(xué)反應(yīng):

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

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67773.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

    摘要:上一篇小樂帶大家學(xué)過新特性表達(dá)式,什么時候可以使用通常表達(dá)式是用在函數(shù)式接口上使用的。使用實現(xiàn)創(chuàng)建產(chǎn)生一個工廠對象以上就是小樂帶給大家的新特性之函數(shù)式接口,下一篇將會為大家?guī)硇绿匦灾椒ㄒ茫凑堦P(guān)注。 上一篇小樂帶大家學(xué)過 Java8新特性-Lambda表達(dá)式,什么時候可以使用Lambda?通常Lambda表達(dá)式是用在函數(shù)式接口上使用的。從Java8開始引入了函數(shù)式接口,其說明比較...

    lakeside 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<