最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin的::符號怎么用

 更新時間:2022年01月24日 11:46:37   作者:元浩875  
本文主要介紹了Kotlin的::符號怎么用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

在閱讀Kotlin的代碼時,經(jīng)常有看到 :: 這個符號,這個符號專業(yè)術(shù)語叫做成員引用,在代碼中使用可以簡化代碼,那到底怎么使用呢以及使用的范圍,這篇文章就來好好捋一下。

正文

這里雖然很熟悉,但是我們還是從簡單說起,需要了解為什么這樣設(shè)計。

傳遞函數(shù)優(yōu)化

這里我們舉個栗子,就看這個熟悉的sortBy排序函數(shù),先定義People類:

//測試代碼
data class People(val name: String,val age: Int){
? ? //自定義的排序條件
? ? fun getMax() : Int{
? ? ? ? return age * 10 + name.length
? ? }
}

然后我們來進行排序:

val people = People("zyh",10)
val people1 = People("zyh1",100)
val peopleList = arrayListOf(people,people1)
//給sortBy傳入lambda
peopleList.sortBy { people -> people.getMax() }

這里我們給sortBy函數(shù)傳遞一個lambda,由于sortBy函數(shù)是內(nèi)聯(lián)的,所以傳遞給它的lambda會被內(nèi)聯(lián),但是假如現(xiàn)在有個問題,就是這些lambda已經(jīng)被定義成了函數(shù)變量,比如我定義了一個頂層函數(shù):

//定義了一個頂層函數(shù)
fun getMaxSort(people: People): Int{
? ? return (people.age) * 10 + people.name.length
}

或者排序條件已經(jīng)定義成了一個變量值:

//排序條件
val condition = { people: People -> people.getMax() }

那這時如果我想再進行排序必須要這么寫了:

//調(diào)用一遍函數(shù)
peopleList.sortBy { getMaxSort(it) }
//傳遞參數(shù)
peopleList.sortBy(condition)

然后這里我們可以利用成員引用 :: 符號來優(yōu)化一下:

//直接就會調(diào)用頂層函數(shù)getMaxSort
peopleList.sortBy(::getMaxSort)
//直接就會調(diào)用People類的getMax函數(shù)
peopleList.sortBy(People::getMax)

這里看起來就是語法糖,可以簡化代碼。

成員引用 ::

你有沒有想過這里是為什么,這里使用了 :: 符號其實就是把函數(shù)轉(zhuǎn)換成了一個值,首先我們使用

val condition = { people: People -> people.getMax() }

這種時,其實condition就是一個函數(shù)類型的變量,這個我們之前文章說過,Kotlin支持完整的函數(shù)類型,而使用高階函數(shù)可以用lambda,但是getMaxSort()函數(shù)它就是一個函數(shù)了,它不是一個值,除非你再外面給它包裹一層構(gòu)成lambda,所以這里調(diào)用condition傳遞進的是sortBy()中,而getMaxSort(it)是以lambda的形式又包裹了一層。
但是使用 :: 符號后,也就是把函數(shù)轉(zhuǎn)換成了一個值,比如 People::getMax 這就是一個值,它代表的就是People內(nèi)的getMax函數(shù)。
而 ::getMaxSort 也是一個值,它表示getMaxSort函數(shù)。

使用范圍

前面2個例子其實也就表明了這種成員引用的使用范圍,一個是類的函數(shù)或者屬性,還有就是頂層函數(shù),它沒有類名,可以省略。

綁定引用

這里再額外說一個知識點,前面說成員引用都是 類名:屬性名 這種格式,比如 People::getMax ,但是它在后面KT版本變化后進行了優(yōu)化,可以看下面代碼:

//定義一個people實例
val people = People("zyh",10)
//利用成員引用,把函數(shù)轉(zhuǎn)換成值
val ageFun = People::age
val age = ageFun(people)
//直接在對象實例上使用 ::
val ageValue = people::age

從上面我們發(fā)現(xiàn),ageValue的值可以從實例上通過成員引用調(diào)用得到,不過這里區(qū)別就大了,ageFun是一個函數(shù)類型,而ageValue則是一個int值。

總結(jié)

總結(jié)一下,其實成員引用 :: 很簡單,它就是把函數(shù)給轉(zhuǎn)成了值,而這個值可以看成是函數(shù)類型,這樣說就十分好理解了。

到此這篇關(guān)于Kotlin的::符號怎么用的文章就介紹到這了,更多相關(guān)Kotlin ::符號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 采用AOP方式封裝6.0權(quán)限管理的方法

    Android 采用AOP方式封裝6.0權(quán)限管理的方法

    這篇文章主要介紹了Android 采用AOP方式封裝6.0權(quán)限管理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Android自定義View實現(xiàn)閃耀字體效果

    Android自定義View實現(xiàn)閃耀字體效果

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)閃耀字體效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • android自定義View之復(fù)合控件

    android自定義View之復(fù)合控件

    這篇文章主要為大家詳細介紹了android自定義View之復(fù)合控件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Android 監(jiān)聽屏幕是否鎖屏的實例代碼

    Android 監(jiān)聽屏幕是否鎖屏的實例代碼

    今天小編通過本文給大家分享android如何監(jiān)聽手機屏幕是否鎖屏。實現(xiàn)方法很簡單,需要的朋友參考下吧
    2017-09-09
  • Android 仿支付寶密碼輸入框效果

    Android 仿支付寶密碼輸入框效果

    模仿支付寶輸入效果,實現(xiàn)很簡單,就是畫個矩形框和圓形,其他的通過組合view來實現(xiàn)所有功能,雖然簡單但是封裝起來,方便以后使用,也分享一下
    2016-12-12
  • Android實現(xiàn)Ant Design 自定義表單組件

    Android實現(xiàn)Ant Design 自定義表單組件

    Ant Design 組件提供了Input,InputNumber,Radio,Select,uplod等表單組件,下面通過本文給大家詳細介紹Android實現(xiàn)Ant Design 自定義表單組件,需要的的朋友參考下吧
    2017-06-06
  • Android RecyclerView自定義上拉和下拉刷新效果

    Android RecyclerView自定義上拉和下拉刷新效果

    這篇文章主要為大家詳細介紹了Android RecyclerView自定義上拉和下拉刷新效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android如何獲取QQ與微信的聊天記錄并保存到數(shù)據(jù)庫詳解

    Android如何獲取QQ與微信的聊天記錄并保存到數(shù)據(jù)庫詳解

    這篇文章主要給大家介紹了關(guān)于Android如何獲取QQ與微信的聊天記錄并保存到數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2018-04-04
  • Android SeekBar實現(xiàn)禁止滑動

    Android SeekBar實現(xiàn)禁止滑動

    這篇文章主要為大家詳細介紹了Android SeekBar實現(xiàn)禁止滑動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Android 滑動監(jiān)聽的實例詳解

    Android 滑動監(jiān)聽的實例詳解

    這篇文章主要介紹了Android 滑動監(jiān)聽的實例詳解的相關(guān)資料,希望通過本能幫助到大家,需要的朋友可以參考下
    2017-09-09

最新評論

南木林县| 武山县| 崇州市| 阜平县| 金湖县| 临汾市| 饶阳县| 信宜市| 喜德县| 田阳县| 织金县| 什邡市| 通辽市| 蓬安县| 泗阳县| 富平县| 安平县| 平果县| 玉屏| 元谋县| 桂阳县| 都安| 高唐县| 桃园县| 五河县| 长白| 垦利县| 玉溪市| 酉阳| 铁力市| 夏邑县| 长白| 肥城市| 民勤县| 汽车| 右玉县| 平泉县| 繁峙县| 苏尼特左旗| 二连浩特市| 德格县|