Kotlin系列之擴展函數(shù)

擴展函數(shù)是怎么產生的

當現(xiàn)有的Java項目中集成Kotlin,有可能出現(xiàn)現(xiàn)有的代碼不能轉成Kotlin,但是需要使用到這些API的時候,這個時候,擴展函數(shù)就派上用場了。

聽起來感覺挺懵懂的,那么我們寫一個獲取字符串最后一個字符的擴展函數(shù)
首先創(chuàng)建一個DemoKotlin.kt

package com.natchi.wanandroid.demo
fun String.lastChar(): Char {
    
    return this.get(this.length - 1)
}

我們來看看擴展函數(shù)的整體結構

  1. 首先該函數(shù)是在類的外面
  2. 接受者類型,確實哪種類型可以調用該函數(shù)
  3. 接受者對象,用來調用這個擴展函數(shù)的一個實例

那么我們來調用一下這個函數(shù),輸出的是g,哈哈,證明這個函數(shù)可以使用

 @JvmStatic
    fun main(args: Array<String>) {
     println("string".lastChar())
    }
---- IntelliJ IDEA coverage runner ---- 
sampling ...
include patterns:
exclude patterns:
g

Process finished with exit code 0

Kotlin的常用的擴展函數(shù)let、with、run、apply、also等等

對于這些函數(shù),我覺得只要關心輸入、輸出是什么,即可用好

我們挑apply函數(shù)來講吧,結合Android開發(fā),其實其他的也差不多一個樣子,

@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    block()
    return this
}

T接受者類型,返回T接受者對象,意思就是哪個實例調用,就返回該實例

例子一、給bean賦值
 val infoBean = InfoItemBean().apply {this:InfoItemBean
            name = "justin"
            address = "china"
            phoneNumber = "1234"
        }
例子二、給Recyclerview初始化配置
 recycler_view.apply {
            layoutManager = mLayoutManager
            adapter = mAdapter
            itemAnimator = null
        }

等等,很多場景都可以用到,我這就不舉例子了,多看看別人寫的Kotlin開源框架,可以發(fā)現(xiàn)很多不一樣的知識,后面還會講到更多Kotlin有趣的東西

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容