Kotlin 的扩展函数(Extension Functions)和运算符重载(Operator Overloading)是两个强大又常用的特性,用于让代码更简洁、表达力更强。


✅ 扩展函数(Extension Functions)

定义:在不修改原类源码的情况下,为类添加新的函数。

🌟 语法

1
2
3
fun ClassName.functionName(params): ReturnType {
// 函数体
}

🧪 示例

1
2
3
4
5
6
7
8
fun String.lastChar(): Char {
return this[this.length - 1]
}

fun main() {
val s = "Hello"
println(s.lastChar()) // 输出:'o'
}

📌 注意

  • this 代表接收者对象(上例中是 String
  • 扩展函数不会真正修改原类,只是通过静态方式实现“扩展”
  • 若类有成员函数与扩展函数同名,成员函数优先

➕ 运算符重载(Operator Overloading)

定义:通过定义带有 operator 关键字的函数,自定义类的运算符行为(如 +, -, [], == 等)。

🌟 支持的运算符(部分)

运算符 对应函数名
+ plus
- minus
* times
/ div
% rem
== equals
[] get, set
.. rangeTo
in contains

🧪 示例

1
2
3
4
5
6
7
8
9
10
11
data class Point(val x: Int, val y: Int) {
operator fun plus(other: Point): Point {
return Point(x + other.x, y + other.y)
}
}

fun main() {
val p1 = Point(1, 2)
val p2 = Point(3, 4)
println(p1 + p2) // 输出:Point(x=4, y=6)
}

⚠️ 注意

  • 需加 operator 关键字
  • Kotlin 会根据运算符自动映射到相应的函数

✨ 拓展+运算符重载的组合示例

你甚至可以为已有类扩展运算符函数

1
2
3
4
5
6
7
operator fun String.times(n: Int): String {
return this.repeat(n)
}

fun main() {
println("Hi! " * 3) // 输出:Hi! Hi! Hi!
}