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! }
|