- 提高架构的易用性
- 减少代码量,让代码更加整洁,纯粹
- 提高编码效率,提高生产力
1.扩展方法
Kotlin的拓展函数可以让你作为一个类成员进行调用的函数.这样可以很方便的拓展一个已经存在的类,为它添加额外的方法.在Kotlin源码中,有大量的拓展函数拓展Java,这样使得Kotlin比Java跟方便使用,效率更高.
扩展方法的原型
扩展方法的使用
给已有的类增加方法使用的.
在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绑定数据也会用到,这种情景非常常见.