
Kotlin
中的面向对象编程
|
65
注意,_priority 属性没有被标记为 val,表示它只是一个构造函数参数,而不是类
的实际属性。你关注的属性 priority 的初始值以该构造函数参数的值为基础,并使用
自定义的 setter 进行赋值。
幕后属性技术在 Kotlin 类中经常出现,因此值得了解其工作原理。
参阅
lazy 委托将在 8.2 节中讨论。
3.5
操作符重载
问题
如何让调用者能够对库中定义的类使用 + 和 * 等操作符(运算符)
译注 3
。
解决方案
使用 Kotlin 的操作符重载机制来实现相关函数。
讨论
在 Kotlin 中,许多操作符(包括加法、减法和乘法)都作为函数来实现。当你使用 +、–
或 * 等符号时,实际上都委托给了相关的函数。这意味着通过提供这些函数,你可以允
许调用者使用操作符来调用这些函数。
参考文档中给出的经典示例是为 Point 类提供成员函数 unaryMinus,参见示例 3-13。
示例 3-13:在 Point 类中重载
unaryMinus
操作符(摘自参考文档)
data class Point(val x: Int, val y: Int)
operator fun Point.unaryMinus() = Point(-x, -y)
val point = Point(10, 20)
fun main() {
println(-point) // prints "Point(x=-10, y=-20)"
}
译注 3: 在本书中,operator 在大部分情况下译作“操作符 ...