记一次安卓(Kotlin)-kotlin拓展(Extensions)_09

142 阅读3分钟
  • 提高架构的易用性
  • 减少代码量,让代码更加整洁,纯粹
  • 提高编码效率,提高生产力
1.扩展方法

Kotlin的拓展函数可以让你作为一个类成员进行调用的函数.这样可以很方便的拓展一个已经存在的类,为它添加额外的方法.在Kotlin源码中,有大量的拓展函数拓展Java,这样使得Kotlin比Java跟方便使用,效率更高.

扩展方法的原型

image.png

扩展方法的使用

给已有的类增加方法使用的.

在Java中使用Kotlin的拓展函数

在Java中调用Kotlin拓展,需要通过扩展所在的文件名 + .的方式进行调用

拓展带泛型的方法

可能会报错,需要在泛型的类前面fun后再加个<T>就OK了

2.扩展属性

拓展属性提供了一种方法能通过属性语法进行访问的API来拓展.尽管他们被叫做属性,但是它们不能拥有任何状态,它不能添加额外的之短到现有的Java对象实例.


//重写get方法以达到扩展属性
//这里的this是这个字符串对象
val String.lastChar: Char get() = this.get(length - 1)

3.Kotlin中常用的拓展

在Kotlin的源码中定义了大量的扩展,比如:let, run, apply...

  • let:

    let拓展函数实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,那么let函数是一个不错的选择;let 函数另一个作用就是可以避免写一些判断null的操作.


//let扩展函数,类后面加上?代表参数可能为空,使用的时候注意判断空
fun testLet(str: String?) {
    str.let {
        val str2 = "abc"
        println(str2 + it)
    }
    //如果在这访问str2,访问不到
    
    //一般如果str可能为空的话都这么用,当str为空,则不会触发闭包里面的逻辑 
    str?.let {
        val str2 = "abc"
        println(str2 + it)
    }
    
}

  • run扩展

run函数只接收一个lambda函数为参数,以闭包形式返回,返回值为最后一行的值或者指定的return的表达式,在run函数中可以直接访问实例的公有属性和方法


fun testRun(jump: Jump): String {
    jump.run{
        test()
        return "222"
    }
}

  • apply 扩展

apply函数的作用是:调用某对象的apply函数,在函数范围内,可以任意调用该对象的任意方法,并返回该对象. 从结构上来看apply函数和run函数很像,唯一不同点就是它们各自返回的值不一样,run函数是以闭包形式返回最后一行代码的值,而apply函数的返回的是传入对象本身. apply一般用于一个对象实例初始化的时候,需要对对象中的属性进行赋值.或者动态inflate出一个XML的View的时候需要给View绑定数据也会用到,这种情景非常常见.