扩展函数是怎么产生的
当现有的Java项目中集成Kotlin,有可能出现现有的代码不能转成Kotlin,但是需要使用到这些API的时候,这个时候,扩展函数就派上用场了。
听起来感觉挺懵懂的,那么我们写一个获取字符串最后一个字符的扩展函数
首先创建一个DemoKotlin.kt
package com.natchi.wanandroid.demo
fun String.lastChar(): Char {
return this.get(this.length - 1)
}
我们来看看扩展函数的整体结构
- 首先该函数是在类的外面
- 接受者类型,确实哪种类型可以调用该函数
- 接受者对象,用来调用这个扩展函数的一个实例
那么我们来调用一下这个函数,输出的是g,哈哈,证明这个函数可以使用
@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的常用的扩展函数let、with、run、apply、also等等
对于这些函数,我觉得只要关心输入、输出是什么,即可用好
我们挑apply函数来讲吧,结合Android开发,其实其他的也差不多一个样子,
@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开源框架,可以发现很多不一样的知识,后面还会讲到更多Kotlin有趣的东西