kotlin中l(wèi)ambda表達(dá)式如何演變簡(jiǎn)化的

1盾碗、標(biāo)準(zhǔn)的lambda表達(dá)式要滿足三個(gè)條件

① 含有實(shí)際參數(shù)
② 含有函數(shù)體
③ 以上的內(nèi)容都要包含在花括號(hào)內(nèi)


當(dāng)然這種形式媚污,在開發(fā)中見到的很少,因?yàn)楹芏鄷r(shí)候都進(jìn)一步簡(jiǎn)化了廷雅。

2耗美、正題:kotlin中點(diǎn)擊方法可以寫的很簡(jiǎn)單,以android view的點(diǎn)擊事件為例航缀,像醬紫:

 View.setOnClickListener {
            
        }

相對(duì)于java的可謂是簡(jiǎn)單多了商架,java的:

view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
            }
        });

雖然java8開始引入lambda了,但是還是比kotlin復(fù)雜:

view.setOnClickListener(v -> {

        });

kotlin大法好芥玉,那么究竟是怎么一步一步的簡(jiǎn)化到一行代碼的呢蛇摸?中間究竟發(fā)生了什么,讓我們一步一步來

         /**
         * 原始的寫法
         */
        bt_lambda.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View ) {
                Logger.d("按鈕被點(diǎn)擊了")
                Logger.d(v.id)
            }

        })
        /**
         * 可以看到setOnClickListener方法傳入了一個(gè) 匿名內(nèi)部類
         * kotlin規(guī)定灿巧,如果對(duì)象是單個(gè)Java(必須是java8习馈!抠藕!如果類似 test2方法的kotlin接口饿肺,不行!6芩啤敬辣!)抽象方法的接口,那么可以用帶有
         * 接口類型的前綴的lambda表達(dá)式來表示
         * OnClickListener接口,參數(shù)為View溉跃,因此可以變成如下寫法
         */
        bt_lambda.setOnClickListener(View.OnClickListener { v: View ->
            Logger.d("按鈕被點(diǎn)擊了")
            Logger.d(v.id)
        })
        /**
         *因?yàn)閟etOnClickListener 是java代碼 View中的方法村刨,所以接口類型的前綴可以省略
         * 變成下面這樣,test2方法中可以看到set方法在kotlin和java中的區(qū)別
         */
        bt_lambda.setOnClickListener({ v: View ->
            Logger.d("按鈕被點(diǎn)擊了")
            Logger.d(v.id)
        })

        /**
         * kotlin語法約定撰茎,如果lambda表達(dá)式是函數(shù)是最后一個(gè)實(shí)參的話嵌牺,它可以放在
         * 括號(hào)外面
         * @see com.xu.module.jianshu.ui.retrofit.Retrofit.create 參考這個(gè)方法動(dòng)態(tài)代理的kotlin寫法
         */
        bt_lambda.setOnClickListener() { v: View ->
            Logger.d("按鈕被點(diǎn)擊了")
            Logger.d(v.id)
        }

        /**
         * kotlin規(guī)定,如果lambda是函數(shù)的唯一實(shí)參的時(shí)候
         * 小括號(hào)可以直接省略乾吻,因此變成這樣
         */
        bt_lambda.setOnClickListener { v: View ->
            Logger.d("按鈕被點(diǎn)擊了")
            Logger.d(v.id)
        }
        /**
         * 因?yàn)閗otlin中可以推導(dǎo)出參數(shù)的類型髓梅,因此可以進(jìn)一步簡(jiǎn)化
         */
        bt_lambda.setOnClickListener { v ->
            Logger.d("按鈕被點(diǎn)擊了")
            Logger.d(v.id)
        }
        /**
         * 因?yàn)橹挥幸粋€(gè)參數(shù),可以用默認(rèn)的參數(shù)t來代替绎签,因此演變成如下
         */
        bt_lambda.setOnClickListener {
            Logger.d("按鈕被點(diǎn)擊了")
            Logger.d(it.id)
        }

基本就是這樣枯饿,如果想了解,那些不能省略诡必。奢方。可以看一下我寫的demo爸舒,撒花

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蟋字,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扭勉,更是在濱河造成了極大的恐慌鹊奖,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涂炎,死亡現(xiàn)場(chǎng)離奇詭異忠聚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)唱捣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門两蟀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人震缭,你說我怎么就攤上這事赂毯。” “怎么了拣宰?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵党涕,是天一觀的道長。 經(jīng)常有香客問我巡社,道長遣鼓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任重贺,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘气笙。我一直安慰自己次企,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布潜圃。 她就那樣靜靜地躺著缸棵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谭期。 梳的紋絲不亂的頭發(fā)上堵第,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音隧出,去河邊找鬼踏志。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胀瞪,可吹牛的內(nèi)容都是我干的针余。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼凄诞,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼圆雁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帆谍,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤伪朽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后汛蝙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烈涮,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年患雇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跃脊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苛吱,死狀恐怖酪术,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翠储,我是刑警寧澤绘雁,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站援所,受9級(jí)特大地震影響庐舟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜住拭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一挪略、第九天 我趴在偏房一處隱蔽的房頂上張望历帚。 院中可真熱鬧,春花似錦杠娱、人聲如沸挽牢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禽拔。三九已至,卻和暖如春室叉,著一層夾襖步出監(jiān)牢的瞬間睹栖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工茧痕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留野来,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓凿渊,卻偏偏與公主長得像梁只,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子埃脏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359