擴展函數(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ù)的整體結構

- 首先該函數(shù)是在類的外面
- 接受者類型,確實哪種類型可以調用該函數(shù)
- 接受者對象,用來調用這個擴展函數(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有趣的東西