Kotlin学习笔记
Kotlin学习笔记一:Kotlin基础
Kotlin学习笔记二:Kotlin的类型系统
Kotlin学习笔记三:函数
Kotlin学习笔记四:类,对象,接口
Kotlin学习笔记五:Lambda编程
运算符重载及其他约定
这个和C++的运算符重载类似,允许你为类定义一些运算符支持的操作,比如+,-,*,/等等,最终还是编译成函数去调用。
重载算术运算符
data class Point(val x : Int, val y : Int){
operator fun plus(other : Point) : Point{
//成员函数
return Point(x + othe r.x, y + other.y)
}
}
//operator fun Point.plus(other: Point) : Point{ //扩展函数
// return Point(x + other.x, y + other.y)
//}
fun main(args : Array<String>) {
val p1 = Point(2, 3)
val p2 = Point(3, 4)
println("p1+p2=${
p1 + p2}")
}
上面定义了一个Point的加法运算符重载,使用的时候就可以直接使用+号进行运算。实际上编译之后还是调用函数:p1.plus(p2)。或者将其定义为扩展函数。
从Java调用Kotlin的重载运算符直接调用函数
用关键字operator定义一个运算符重载函数,之后就可以用相应的符号进行操作,重载的运算符和普通运算符相同。
可重载的二元算术运算符
| 表达式 | 函数名 |
|---|---|
| a*b | times |
| a/b | div |
| a%b | mod |
| a+b | plus |
| a-b | minus |
上面的每个运算符都有一个复合赋值运算符,比如plusAssign, timesAssign等,复合运算符只是修改对象,所以如果定义了一个Unit类型的复合赋值运算符函数,当在使用+=,*=这些运算的时候,就会自动调用这些方法。
定义运算符时不要求两个运算数是相同类型,比如用一个数字来缩放一个点
operator fun Point.times(scale : Double) : Point{
return Point((x * scale).toInt(), (y * scale).toInt())
}
operator fun Double.times(p

本文深入探讨了Kotlin中的运算符重载机制,包括算术运算符、比较运算符、位运算符等的重载方法,以及如何通过重载实现更自然的代码表达。同时,介绍了Kotlin中集合、区间、解构声明等约定的使用。

被折叠的 条评论
为什么被折叠?



