Kotlin 扩展函数和运算符重载
扩展函数
扩展函数表示即使在不修改某个类的源码的形况下,仍然可以打开这个类,向该类添加新的函数。扩展函数的语法结构:
fun ClassName.methodName(param1: Int, param2: Int): Int { |
扩展函数可以定义在任何一个现有类中,建议向哪个类中添加扩展函数就定义一个同名的 Kotlin 文件,便于以后查找,最好定义为顶层方法,可以让扩展函数拥有全局的访问域。
运算符重载
运算符重载是 Kotlin 提供的一个比较有趣的语法糖。Kotlin 允许将所有的运算符甚至其他的关键字进行重载,从而扩展这些运算符和关键字的用法。
运算符重载使用 operator
关键字,只有在指定函数前加上 operator
关键字就可以实现运算符的重载功能,不同的运算符对应的重载函数也是不同的,以加号运算符为例:
class Obj { |
让两个 Money 对象相加或 Money 对象和数字相加:
class Money(val value: Int) { |
语法糖表达式 | 实际调用函数 |
---|---|
a + b | a.plus(b) |
a - b | a.minus(b) |
a * b | a.times(b) |
a / b | a.div(b) |
a % b | a.rem(b) |
a++ | a.inc() |
a– | a.dec() |
+a | a.unaryPlus() |
-a | a.unaryMinus() |
!a | a.not() |
a == b | a.equals(b) |
a > b a < b a >= b a <= b |
a.compareTo(b) |
a..b | a.rangeTo(b) |
a[b] | a.get(b) |
a[b]=c | a.set(b, c) |
a in b | b.contains(a) |
实现 str * n
的写法表示让 str 字符串重复 n 次,可以向 String 类中添加扩展函数:
operator fun String.times(n: Int) = repeat(n) |