首頁 > 軟體

Kotlin標準函數與靜態方法應用詳解

2022-12-03 14:01:20

標準函數

  • 標準函數就是在Standard.kt檔案中定義的函數,任何Kotlin程式碼都可以自由地呼叫所有的標準函數
  • let函數就屬於是一個標準函數,經常配合?.操作符來進行判空處理

with函數

with函數接收兩個引數,第一引數可以是任何型別的物件,第二個引數是一個Lambda表示式

with函數會在Lambda表示式中提供第一個引數的上下文,並使用Lambda表示式的最後一行程式碼作為函數的返回值

範例程式碼

val res = with(obj) {
    //這裡是obj物件的上下文
    "value"//這裡是with函數的返回值
}

with函數的作用.假如現在有個需求讓吃完所有的水果並且將結果列印出來,程式碼可以這樣寫

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函數可以這樣寫,可以看到在Lambda表示式中,都是StringBuilder的上下文,那麼就不需要我們通過StringBuilder的範例呼叫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()//最後一行就是函數的返回值
    }
    println(res)
}

run函數

  • run函數和with函數基本類似,區別就是,run函數不能直接呼叫,需要在某個物件的基礎上進行呼叫
  • 其次run函數只接受一個Lambda引數,並且在Lambda表示式中提供呼叫物件的上下文.
  • 其他和with函數都是一樣的
  • 使用run函數完成上述需求的範例
fun runTest() {
    val list = listOf<String>("Apple", "Banana", "Pear")
    //將StringBuilder調出來,用來呼叫run函數
    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函數

  • apply函數和run函數基本一樣,就是apply函數不能指定返回值,只能返回撥用呼叫者的本身
  • apply函數範例
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())
}

靜態方法

  • 靜態方法又叫做類方法,就是說不需要範例,直接用類就可以進行呼叫,一般會將工具類中的方法設定為靜態方法,方便呼叫
  • 在java當中的靜態方法就是使用static關鍵字修飾的方法
  • 但是在kotlin當中沒有直接的靜態方法

單例類

在kotlin當中要是想要定義一個工具類,會比較推薦單例類進行實現

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

雖然單例類中的doAction()方法並不是靜態放啊,但是我們還是可以直接使用Util.doAction()來進行呼叫

但是單例類的缺點是單例類中的方法都是類似靜態方法這種呼叫方式,但是我們只需要讓類中的一個方法變成靜態的怎麼辦?

companion object

在companion object中定義的方法就可以類似於靜態方法那樣進行呼叫了

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

註解

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

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

如下

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

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

頂層方法

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

到此這篇關於Kotlin標準函數與靜態方法應用詳解的文章就介紹到這了,更多相關Kotlin標準函數與靜態方法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com