拓展函数
定义
Kotlin的标准库给我们提供了大量的类,类里面提供了大量的方法。但是,实际开发过程中,具体的某一个类,仅仅通过系统提供的方法远远不能满足需求。
使用Java开发的时候,我们可以通过继承类或者通过代理模式,可以对某一个类做增强。使用Kotlin开发,这一切变的简单。Kotlin允许拓展方法,只需要按照给定的语法格式,可以很方便的对某一个类添加方法。
怎么定义拓展函数
那拓展函数怎么定义呢?通过如下格式定义:

AnyClass:任意类
functionName:拓展函数的函数名
params:拓展函数的参数
receiverType:拓展函数的返回值
method body:拓展函数的方法体
假如,假如我们“想获取字符串最后一个字符”,如果用java语言,我们可能需要会定义一个StringUtils的类,然后写一个getLastChar的方法,代码如下:

同样的逻辑,如果在Kotlin里面,就是通过拓展函数的形式去实现了,参考代码:

拓展函数使用注意
java里面,父类和子类有相同方法的时候,子类方法优先。这是多态的表现,通过一个代码给大家回顾下,参考代码:

那如果kotlin里面,子类和父类拥有同名的拓展方法会是怎样呢?Kotlin的拓展函数则不存在子类优先的原则。Kotlin的拓展函数是静态解析的,完全由当前变量的类型决定。参考代码:

那如果kotlin里面,类本身的成员函数和拓展函数同名会怎样呢?Kotlin的拓展函数针对成员函数和拓展函数同名问题,遵循成员函数优先的原则。参考代码:

拓展属性
定义
Kotlin的标准库给我们提供了大量的类,类里面提供了大量的属性。但是,实际开发过程中,具体的某一个类,仅仅通过系统提供的属性可能不能满足需求。
使用Java开发的时候,我们可以通过继承类或者通过代理模式,可以对某一个类做增强。使用Kotlin开发,这一切变的简单。Kotlin允许拓展属性,只需要按照给定的语法格式,可以很方便的对某一个类添加属性。
怎么定义拓展属性
那拓展函数怎么定义呢?通过如下格式定义:

getter
setter
AnyClass:任意类
propertiesName:拓展属性名字
propertiesType:拓展属性类型
getter:拓展属性的getter方法
setter:拓展属性的setter方法
假如我们想“获取字符串最后一个字符”,我们除了用开始的拓展函数去实现,还可以使用拓展属性,参考案例:

拓展函数编辑技巧

网友评论