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

Kotlin標(biāo)準(zhǔn)函數(shù)與靜態(tài)方法應(yīng)用詳解

 更新時間:2022年12月02日 14:10:00   作者:z啵唧啵唧  
Kotlin中的標(biāo)準(zhǔn)函數(shù)指的是Standard.kt文件中定義的函數(shù),任何Kotlin代碼都可以自由地調(diào)用所有的標(biāo)準(zhǔn)函數(shù)。例如let這個標(biāo)準(zhǔn)函數(shù),他的主要作用就是配合?.操作符來進行輔助判空處理

標(biāo)準(zhǔn)函數(shù)

  • 標(biāo)準(zhǔn)函數(shù)就是在Standard.kt文件中定義的函數(shù),任何Kotlin代碼都可以自由地調(diào)用所有的標(biāo)準(zhǔn)函數(shù)
  • let函數(shù)就屬于是一個標(biāo)準(zhǔn)函數(shù),經(jīng)常配合?.操作符來進行判空處理

with函數(shù)

with函數(shù)接收兩個參數(shù),第一參數(shù)可以是任何類型的對象,第二個參數(shù)是一個Lambda表達式

with函數(shù)會在Lambda表達式中提供第一個參數(shù)的上下文,并使用Lambda表達式的最后一行代碼作為函數(shù)的返回值

示例代碼

val res = with(obj) {
    //這里是obj對象的上下文
    "value"http://這里是with函數(shù)的返回值
}

with函數(shù)的作用.假如現(xiàn)在有個需求讓吃完所有的水果并且將結(jié)果打印出來,代碼可以這樣寫

fun main() {
    doSomething()
}
fun doSomething() {
    val list = listOf<String>("Apple", "Banana", "Pear")
    val sb = StringBuilder()
    sb.append("Start eating fruits.\n")
    for (fruits in list) {
        sb.append(fruits).append("\n")
    }
    sb.append("Ate all fruits.")
    val res = sb.toString()
    println(res)
}

利用with函數(shù)可以這樣寫,可以看到在Lambda表達式中,都是StringBuilder的上下文,那么就不需要我們通過StringBuilder的實例調(diào)用append()方法了,而是直接使用append()方法即可.

fun withTest() {
    val list = listOf<String>("Apple", "Banana", "Pear")
    val res = with(StringBuilder()) {
        append("Start eating fruits.\n")
        for (fruits in list) {
            append(fruits)
            append("\n")
        }
        append("Ate all fruits.")
        toString()//最后一行就是函數(shù)的返回值
    }
    println(res)
}

run函數(shù)

  • run函數(shù)和with函數(shù)基本類似,區(qū)別就是,run函數(shù)不能直接調(diào)用,需要在某個對象的基礎(chǔ)上進行調(diào)用
  • 其次run函數(shù)只接受一個Lambda參數(shù),并且在Lambda表達式中提供調(diào)用對象的上下文.
  • 其他和with函數(shù)都是一樣的
  • 使用run函數(shù)完成上述需求的實例
fun runTest() {
    val list = listOf<String>("Apple", "Banana", "Pear")
    //將StringBuilder調(diào)出來,用來調(diào)用run函數(shù)
    val res = StringBuilder().run {
        append("Start eating fruits.\n")
        for (fruits in list) {
            append(fruits)
            append("\n")
        }
        append("Ate all fruits.")
        toString()
    }
    println(res)
}

apply函數(shù)

  • apply函數(shù)和run函數(shù)基本一樣,就是apply函數(shù)不能指定返回值,只能返回調(diào)用調(diào)用者的本身
  • apply函數(shù)實例
fun applyTest() {
    val list = listOf<String>("Apple", "Banana", "Pear")
    val res = StringBuilder().apply {
        append("Start eating fruits.\n")
        for (fruits in list) {
            append(fruits)
            append("\n")
        }
        append("Ate all fruits.")
    }
    println(res.toString())
}

靜態(tài)方法

  • 靜態(tài)方法又叫做類方法,就是說不需要實例,直接用類就可以進行調(diào)用,一般會將工具類中的方法設(shè)置為靜態(tài)方法,方便調(diào)用
  • 在java當(dāng)中的靜態(tài)方法就是使用static關(guān)鍵字修飾的方法
  • 但是在kotlin當(dāng)中沒有直接的靜態(tài)方法

單例類

在kotlin當(dāng)中要是想要定義一個工具類,會比較推薦單例類進行實現(xiàn)

object Util {
    fun doAction() {
        println("do something")
    }
}

雖然單例類中的doAction()方法并不是靜態(tài)放啊,但是我們還是可以直接使用Util.doAction()來進行調(diào)用

但是單例類的缺點是單例類中的方法都是類似靜態(tài)方法這種調(diào)用方式,但是我們只需要讓類中的一個方法變成靜態(tài)的怎么辦?

companion object

在companion object中定義的方法就可以類似于靜態(tài)方法那樣進行調(diào)用了

class Util {
    //非靜態(tài)方法屬性
    fun doAction1() {
    }
    //擁有靜態(tài)方法的屬性
    companion object {
        fun doAction2() {
        }
    }
}

注解

單例類和companion object都是在語法形式上模仿了靜態(tài)方法,實際上不屬于真正的靜態(tài)方法

如果我們給單例類或者companion object中的方法加上@JvmStatic注解,那么kotlin編譯器就會將這些方法編譯成為真正的靜態(tài)方法

如下

class Util {
    //非靜態(tài)方法屬性
    fun doAction1() {
    }
    //擁有靜態(tài)方法的屬性
    companion object {
        @JvmStatic
        fun doAction2() {
        }
    }
}

@JvmStatic只能加在單例類或者companion object中的方法

頂層方法

  • 頂層方法指的就是沒有定義在任何類中的方法,kotlin編譯器會將所有的頂層方法編譯成為靜態(tài)方法
  • 因此只要定義了一個頂層方法,那么他肯定是一個靜態(tài)方法

到此這篇關(guān)于Kotlin標(biāo)準(zhǔn)函數(shù)與靜態(tài)方法應(yīng)用詳解的文章就介紹到這了,更多相關(guān)Kotlin標(biāo)準(zhǔn)函數(shù)與靜態(tài)方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android開發(fā)之無痕過渡下拉刷新控件的實現(xiàn)思路詳解

    Android開發(fā)之無痕過渡下拉刷新控件的實現(xiàn)思路詳解

    下拉刷新效果功能在程序開發(fā)中經(jīng)常會見到,今天小編抽時間給大家分享Android開發(fā)之無痕過渡下拉刷新控件的實現(xiàn)思路詳解,需要的朋友參考下吧
    2016-11-11
  • Android實現(xiàn)自制和播放錄音程序

    Android實現(xiàn)自制和播放錄音程序

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)自制和播放錄音程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 詳解Flutter和Dart取消Future的三種方法

    詳解Flutter和Dart取消Future的三種方法

    這篇文章主要為大家詳細(xì)介紹了在Flutter和Dart中取消Future的三種方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-04-04
  • Android實戰(zhàn)打飛機游戲之怪物(敵機)類的實現(xiàn)(4)

    Android實戰(zhàn)打飛機游戲之怪物(敵機)類的實現(xiàn)(4)

    這篇文章主要為大家詳細(xì)介紹了Android實戰(zhàn)打飛機游戲之怪物(敵機)類的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 深入淺析Android接口回調(diào)機制

    深入淺析Android接口回調(diào)機制

    在Android中到處可見接口回調(diào)機制,尤其是UI事件處理方面,本文給大家介紹android接口回調(diào)機制,涉及到android接口回調(diào)相關(guān)知識,對本文感興趣的朋友可以參考下本篇文章
    2015-11-11
  • Android操作SQLite數(shù)據(jù)庫(增、刪、改、查、分頁等)及ListView顯示數(shù)據(jù)的方法詳解

    Android操作SQLite數(shù)據(jù)庫(增、刪、改、查、分頁等)及ListView顯示數(shù)據(jù)的方法詳解

    這篇文章主要介紹了Android操作SQLite數(shù)據(jù)庫(增、刪、改、查、分頁等)及ListView顯示數(shù)據(jù)的方法,結(jié)合實例形式詳細(xì)分析了Android操作SQLite數(shù)據(jù)庫及使用ListView顯示數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • Android 內(nèi)核代碼 wake_up源碼解析

    Android 內(nèi)核代碼 wake_up源碼解析

    這篇文章主要為大家介紹了Android 內(nèi)核代碼 wake_up源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Android手機屏幕同步工具asm.jar

    Android手機屏幕同步工具asm.jar

    今天小編就為大家分享一篇關(guān)于Android手機屏幕同步工具asm.jar的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Android6.0 屏幕固定功能詳解

    Android6.0 屏幕固定功能詳解

    android6.0在設(shè)置->安全->屏幕固定開啟后,然后再長按home鍵出現(xiàn)最近的幾個Activity可以選擇一個圖釘按鈕就開啟了屏幕固定功能。這篇文章主要介紹了Android6.0 屏幕固定功能的相關(guān)資料,感興趣的朋友一起看看吧
    2016-09-09
  • android實現(xiàn)將位置信息寫入JPEG圖片文件

    android實現(xiàn)將位置信息寫入JPEG圖片文件

    下面小編就為大家?guī)硪黄猘ndroid實現(xiàn)將位置信息寫入JPEG圖片文件。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論