1、扩展函数
在不改变原有类(系统类、自定义类)的基础上,为原有的类增加函数
示例:为String类添加空判断方法
fun main(args: Array<String>) {
var str="张三"
println(str.myIsEmpty())
}
fun String.myIsEmpty():Boolean{
return this==null||this.length==0
}
输出:
fun main(args: Array<String>) {
var str=""
println(str.myIsEmpty())
}
fun String.myIsEmpty():Boolean{
return this==null||this.length==0
}
输出:
上面默认了一种情况就是str永远不会为null
修改代码,使str可能出现null
fun main(args: Array<String>) {
var str=null
println(str?.myIsEmpty())
}
fun String.myIsEmpty():Boolean{
return this==null||this.length==0
}
输出:
并没有输出true或者false,而是输出了null,因为str根本就没用调用myIsEmpty()方法
修改代码:
fun main(args: Array<String>) {
var str=null
println(str.myIsEmpty())
}
fun String?.myIsEmpty():Boolean{
return this==null||this.length==0
}
输出:
2、在父类中定义的扩展函数子类可以正常访问,但是不能覆写
fun main(args: Array<String>) {
var son=Son()
son.sayHello()
}
open class Father
fun Father.sayHello(){
println("父类中的扩展函数")
}
class Son:Father()
输出: