欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin的::符號怎么用

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

前言

在閱讀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
? ? }
}

然后我們來進(jìn)行排序:

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() }

那這時如果我想再進(jìn)行排序必須要這么寫了:

//調(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í)就是把函數(shù)轉(zhuǎn)換成了一個值,首先我們使用

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

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

使用范圍

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

綁定引用

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

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

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

總結(jié)

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

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

相關(guān)文章

  • Kotlin語言使用WebView示例介紹

    Kotlin語言使用WebView示例介紹

    隨著后臺技術(shù)的不斷發(fā)展,App前端的應(yīng)用都布置了Web頁面的界面,這個界面就是由WebView組件渲染出來的。WebView由如下優(yōu)點(diǎn):可以直接顯示和渲染W(wǎng)eb頁面或者網(wǎng)頁;可以直接調(diào)用網(wǎng)絡(luò)上或者本地的html文件,也可以和JavaScript交互使用
    2022-09-09
  • Android 監(jiān)聽手機(jī)GPS打開狀態(tài)實(shí)現(xiàn)代碼

    Android 監(jiān)聽手機(jī)GPS打開狀態(tài)實(shí)現(xiàn)代碼

    這篇文章主要介紹了Android 監(jiān)聽手機(jī)GPS打開狀態(tài)實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • android12?SD如何動態(tài)申請讀寫權(quán)限

    android12?SD如何動態(tài)申請讀寫權(quán)限

    這篇文章主要給大家介紹了關(guān)于android12?SD如何動態(tài)申請讀寫權(quán)限的相關(guān)資料,從Android?6.0開始,權(quán)限不再是在manifest?件中粘貼?下即可,這時候權(quán)限也正式?進(jìn)?家的視野,需要的朋友可以參考下
    2023-07-07
  • Android 自動補(bǔ)全提示輸入AutoCompleteTextView、 MultiAutoCompleteTextView

    Android 自動補(bǔ)全提示輸入AutoCompleteTextView、 MultiAutoCompleteTextV

    本文主要介紹了Android自動補(bǔ)全提示輸入AutoCompleteTextView、 MultiAutoCompleteTextView,具有一定的參考作用,下面跟著小編一起來看下吧
    2017-01-01
  • 解析android中的幫助、about、關(guān)于作者、HELP等提示頁面

    解析android中的幫助、about、關(guān)于作者、HELP等提示頁面

    本篇文章是對android中的幫助、about、關(guān)于作者、HELP等提示頁面進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Android實(shí)現(xiàn)傳感器功能

    Android實(shí)現(xiàn)傳感器功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)傳感器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Android ReboundScrollView仿IOS拖拽回彈效果

    Android ReboundScrollView仿IOS拖拽回彈效果

    這篇文章主要為大家詳細(xì)介紹了Android ReboundScrollView仿IOS拖拽回彈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android中方法數(shù)超限問題與啟動優(yōu)化詳解

    Android中方法數(shù)超限問題與啟動優(yōu)化詳解

    這篇文章主要給大家介紹了Android中方法數(shù)超限問題與啟動優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Android設(shè)計模式之Builder模式解析

    Android設(shè)計模式之Builder模式解析

    這篇文章主要為大家詳細(xì)介紹了Android設(shè)計模式之Builder模式解析的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android Binder進(jìn)程間通信工具AIDL使用示例深入分析

    Android Binder進(jìn)程間通信工具AIDL使用示例深入分析

    Binder作為Android 眾多的IPC通訊手段之一,在Framework的數(shù)據(jù)傳輸中起到極為關(guān)鍵的作用。Binder機(jī)制可謂是Android 知識體系里的重中之重,作為偏底層的基礎(chǔ)組件,平時我們很少關(guān)注它,而它卻是無處不在,也是Android 面試易考察的點(diǎn)之一
    2022-11-11

最新評論