简介
Kotlin的扩展函数功能使得我们可以为现有的类添加新的函数,实现某一具体功能 。
扩展函数是静态解析的,并未对原类添加函数或属性,对类本身没有任何影响。
扩展属性允许定义在类或者kotlin文件中,不允许定义在函数中。
使用
fun Any.show(string: String) {
println(string)
}
fun Extend.show2(string: String){
println(string)
}
class Extend {
}
fun main(args: Array<String>) {
Extend().show("我是扩展函数")
Extend().show2("我是扩展函数")
}
扩展属性
类的扩展属性原理其实与扩展方法是一样的,只是定义的形式不同,扩展属性必须定义get和set方法,并且类似于接口中定义的变量,没有backingfield,即没有field关键字,不能用来存储变量。(一般的类属性,在其对象实例中都会分配一点内存来存储属性的值。
fun main(args: Array<String>) {
val str = "aa"
//没有backing field,不能存储值,其实际是通过setXXX(str,10)操作str
//输出:aa10
str.s = 10
//输出:2
println(str.s)
}
var String.s: Int
get() = this.length
set(value){
//set方法并没有field可以用来存储value,
//其实际作用是使用通过value来操作调用者,即this
//plus二元操作符a+b
println(this.plus(value))
}