Kotlin-高階函數(shù)的使用(二)

文章目錄:

上一篇文章帶大家認識到了什么是高階函數(shù)校镐,那這一章就帶大家看看高階函數(shù)的實際使用場景吧

提問

我們想一想吸祟,高階函數(shù)帶給我們的是什么,我們?yōu)槭裁匆褂盟丶劾裕恳驗樗梢宰屛覀兊姆椒ǜ唵胃咝惴蹋苋サ羧哂嗟臉影宕a,讓我們關注的邏輯更清晰的展現(xiàn)在我們的面前虐拓,所以高階函數(shù)一定是用在我們的方法實現(xiàn)上,而官方api其實已經將我們常用的快捷操作用高階函數(shù)給封裝好了傲武,比如with,apply等操作符蓉驹,所以剩下的就是接口調用了。

不知道大家用Kotlin實現(xiàn)過OnClickListener接口沒有谱轨,有3種寫法:

青銅版:

 view.setOnClickListener(object :View.OnClickListener{
            override fun onClick(v: View?) {
                  //敖溽!!我被點擊了
            }
        })

黃金版

view.setOnClickListener { v ->
            {
                //巴镣诗茎!我被點擊了  
            }
        }

鉆石版

 view.setOnClickListener {
                //啊献汗!我被點擊了  
        }

我們一對比發(fā)現(xiàn)敢订,代碼是一步一步被省略的,首先是省略了接口聲明(轉化為了lambda)罢吃,其次是省略了lambda的花括號(Kotlin的特性楚午,當參數(shù)只有一個lambda參數(shù)的時候,括號可以省略),所以我們要實現(xiàn)的是如何將接口聲明轉化為lambda,哈哈尿招,這不正是我們高階函數(shù)所擅長的嗎

實現(xiàn)

雖然我們不能直接看到kotlin內部的高階函數(shù)的實現(xiàn)方式矾柜,但是我們按住ctrl鍵將鼠標移到方法上是可以看到高階函數(shù)的聲明方式的,如你所見是這樣的:

public final fun setOnClickListener( l: ((v: View!) → Unit)! ): Unit

看過我上篇文章的一眼就能看明白就谜,這是聲明了一個以view為參數(shù)的無返回值的高階函數(shù)怪蔑,但他是如何實現(xiàn)的呢,請看以下代碼:

public final fun setOnClickListener( l: ((v: View!) → Unit)! ): Unit{
    //將接口實現(xiàn)并賦值給全局變量接口方便接口方法調用
    mOnClickListener = object :View.OnClickListener{
                  override fun onClick(v: View?) {
                           l.invoke(v) //關鍵是這句
                  }
              }
}

原理就是內部將接口給實例化丧荐,然后將邏輯通過invoke方法代理出去缆瓣,這樣我們點擊事件內部就會走invoke方法啦。而invoke實際是一個接口(翻譯成java代碼你就明白啦),所以我們在方法外面實現(xiàn)的其實是invoke的接口實現(xiàn)邏輯虹统,注意弓坞,這種接口的實現(xiàn)方式只能在接口只有一個方法的時候哦,因為invoke只有一個车荔,哈哈渡冻,怎么樣,setOnClickListener的處理邏輯小伙伴們明白了嗎忧便,舉一反三的事情就交給各位勤奮的小伙伴了.

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末族吻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呼奢,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件切平,死亡現(xiàn)場離奇詭異握础,居然都是意外死亡,警方通過查閱死者的電腦和手機悴品,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門禀综,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苔严,你說我怎么就攤上這事定枷。” “怎么了届氢?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵欠窒,是天一觀的道長。 經常有香客問我退子,道長岖妄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任寂祥,我火速辦了婚禮荐虐,結果婚禮上,老公的妹妹穿的比我還像新娘丸凭。我一直安慰自己福扬,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布惜犀。 她就那樣靜靜地躺著铛碑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪向拆。 梳的紋絲不亂的頭發(fā)上亚茬,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音浓恳,去河邊找鬼刹缝。 笑死,一個胖子當著我的面吹牛颈将,可吹牛的內容都是我干的梢夯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼晴圾,長吁一口氣:“原來是場噩夢啊……” “哼颂砸!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤人乓,失蹤者是張志新(化名)和其女友劉穎勤篮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體色罚,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡碰缔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了戳护。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片金抡。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腌且,靈堂內的尸體忽然破棺而出梗肝,到底是詐尸還是另有隱情,我是刑警寧澤铺董,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布巫击,位于F島的核電站,受9級特大地震影響精续,放射性物質發(fā)生泄漏喘鸟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一驻右、第九天 我趴在偏房一處隱蔽的房頂上張望什黑。 院中可真熱鬧,春花似錦堪夭、人聲如沸愕把。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恨豁。三九已至,卻和暖如春爬迟,著一層夾襖步出監(jiān)牢的瞬間橘蜜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工付呕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留计福,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓徽职,卻偏偏與公主長得像象颖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姆钉,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 前言 人生苦多说订,快來 Kotlin 抄瓦,快速學習Kotlin! 什么是Kotlin陶冷? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,146評論 9 118
  • 寫在開頭:本人打算開始寫一個Kotlin系列的教程钙姊,一是使自己記憶和理解的更加深刻,二是可以分享給同樣想學習Kot...
    胡奚冰閱讀 1,290評論 1 5
  • 原文鏈接:https://github.com/EasyKotlin 值就是函數(shù)埂伦,函數(shù)就是值摸恍。所有函數(shù)都消費函數(shù),...
    JackChen1024閱讀 5,952評論 1 17
  • 不重要的廢話 前段時間看了一遍《Programming Kotlin》赤屋,主要目的是想提高自己的英文閱讀能力,能力提...
    珞澤珈群閱讀 3,336評論 1 7
  • 瘧疾是一種周期性發(fā)冷發(fā)燒的傳染病壁袄。病原體是瘧原蟲类早。由瘧蚊傳染到人體血液中,發(fā)虐子嗜逻,有的地區(qū)叫打擺子涩僻。 作為世界上殺...
    量子哥閱讀 297評論 16 15