扩展函数
- 不修改源文件的情况下,可以动态的为一个类扩展新功能,也无需继承重写。
- 一个类的扩展函数可以在同包目录下直接调用,出了这个范围需要导包使用。(不必像 Java 为了定义一个方法而专门创建工具类,可以把公共函数写到一个 .kt 文件中,通过 import 导入就可以使用了)。
- fun 类名.方法名(参数列表) : 返回值类型 { 方法体 }
fun ClassName.methodName(params1:Int, params:Int) : Int { }
举例:为String类添加获取字符个数的扩展函数
fun String.getCharCount() :Int{
var count = 0
for (it in this) {
count++
}
return count
}
//使用
println("123456".getCharCount()) //打印:6
中缀表达式
使用 infix 关键字修饰的函数,就是一个中缀表达式,使用起来就是一个运算符,更接近自然语言便于阅读。写法要求如下:
- 只能有一个参数(不能是可变参数、不能有默认参数)
- 必须是成员函数或扩展函数
//成员函数实现方式
class Demo {
var sum = 10
infix fun addNum(num: Int): Int {
sum += num
return sum
}
}
//扩展函数实现方式
infix fun String.addChar(char: Char): String = this.plus(char)
//使用
val demo = Demo()
demo addNum 5
println(demo.sum) //打印:15
println("123456".addChar('A')) //打印:123456A
|