前言
该文是《第一行代码》第三版第5章Kotlin部分的笔记,方便记忆以及日后复习
扩展函数和运算符重载
一、扩展函数
(一)什么是扩展函数?
扩展函数表示即使在不修改某个类的源码的情况下,仍然可以打开这个类,向该类添加新的函数。
(二)语法结构
定义扩展函数的语法结构:
fun ClassName.methodName(param1: Int, param2: Int) : Int {
return 0
}
相比于定义一个普通函数,定义扩展函数只需要在函数名的前面加上一个ClassName.的语法结构,就表示将该函数添加到指定类当中了。
(三)实例
我们为String类添加一个扩展函数,这个扩展函数可以统计字符串的字母数量。
我们新创建一个文件String.kt,一般来说扩展函数对文件名没有要求,但为了方便查找,建议与类名相同。
现在在String.kt文件中编写如下代码:
fun String.lettersCount(): Int {
var count = 0
for (char in this) {
if(char.isLetter()) {
count++;
}
}
return count;
}
定义好了扩展函数之后,统计某个字符串中的字母数量只需要这样写:
val count = "ABCASCA#!@#".lettersCount()
二、运算符重载
- 运算符重载的关键字是operator,只要在指定的函数的前面加上operator关键字,就可以实现运算符重载的功能
- 不同运算符对应的重载函数也是不同的,比如加号运算符对应的是plus()
以加号为例,实现让两个对象相加的功能,语法结构如下:
class Obj {
operator fun plus(obj: Obj) : Obj {
// 处理相加的逻辑
}
}
- Kotlin允许我们对同一个运算符进行多重重载
class Money(val value: Int) {
operator fun plus(money: Money) : Money {
val sum = value + money.value
return Money(sum)
}
operator fun plus(newValue: Int): Money {
val sum = value + newValue
return Money(sum)
}
}
调用:
val money1 = Money(5)
val money2 = Money(10)
val money3 = money1 + money2
val money4 = money3 + 20
println(money4.value)