Kotlin常用扩展函数let、with、run、apply、also

2019-05-1105:58:04APP与小程序开发Comments3,293 views字数 1001阅读模式

扩展函数是怎么产生的

当现有的Java项目中集成Kotlin,有可能出现现有的代码不能转成Kotlin,但是需要使用到这些API的时候,这个时候,扩展函数就派上用场了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12064.html

听起来感觉挺懵懂的,那么我们写一个获取字符串最后一个字符的扩展函数
首先创建一个DemoKotlin.kt文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12064.html

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

我们来看看扩展函数的整体结构文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12064.html

  1. 首先该函数是在类的外面
  2. 接受者类型,确实哪种类型可以调用该函数
  3. 接受者对象,用来调用这个扩展函数的一个实例

那么我们来调用一下这个函数,输出的是g,哈哈,证明这个函数可以使用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12064.html

 @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开发,其实其他的也差不多一个样子,文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12064.html

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

T接受者类型,返回T接受者对象,意思就是哪个实例调用,就返回该实例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12064.html

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

等等,很多场景都可以用到,我这就不举例子了,多看看别人写的Kotlin开源框架,可以发现很多不一样的知识.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12064.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12064.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/xcx/12064.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定