Kotlin 操作符重载
2024-01-08 22:36:24
Kotlin 操作符重载
Kotlin 通过
operator
关键字 修饰 操作符函数,来实现 操作符重载。
++
操作,对应inc
函数,--
操作符,对应dec
函数
举例,Point
类 实现 ++
操作符重载:
class Point {
operator fun inc(): Point {
// 实现 ++ 重载
return Point(x+1, y+1)
}
}
说明:对象 遇到 操作符时,即调用 对应的 操作符函数。
操作符函数 根据 操作符 分类:
一元操作符
操作符 | 重载函数名 |
---|---|
a++ | a.inc() |
a– | a.dec() |
!a | a.not() |
+a | a.unaryPlus() |
-a | a.unaryMinus() |
数学运算符
操作符 | 重载函数名 |
---|---|
a+b | a.plus(b) |
a-b | a.mius(b) |
a*b | a.times(b) |
a / b | a.div(b) |
a…b | a.rangeTo(b) |
a…<b | a.rangeUtil(b) |
相等操作符
操作符 | 重载函数名 |
---|---|
a == b | a?.equals(b) ?: (b === null) |
a != b | !(a?.equals(b) ?: (b === null)),即 相等的 取反 |
比较操作符
实现了
Comparable
接口的compareTo
方法,通过 其返回值比较。
操作符 | 重载函数名 |
---|---|
a > b | a.compareTo(b) > 0 |
a < b | a.compareTo(b) < 0 |
a >= b | a.compareTo(b) >= 0 |
a <= b | a.compareTo(b) <= 0 |
in 操作符
操作符 | 重载函数名 |
---|---|
a in b | a.contains(b) |
a !in b | !a.contains(b) |
索引 操作符
操作符 | 重载函数名 |
---|---|
a[i] | a.get(i) |
a[i] = b | a.set(i, b) |
invoke调用操作符
Kotlin 实现 可调用函数,基于
kotlin.jvm.functions.Function1 - 22...N
1 - 22 对应是 形参的个数,N 时 用 vararg 可变参数
实现了 invoke
操作符重载方法。
operator fun invoke(p1: P1): R
操作符 | 重载函数名 |
---|---|
a() | a.invoke() |
a(i) | a.invoke(i) |
属性委托操作符
在 属性委托 中,实现了
getValue
和setValue
方法,实现 委托属性的 读写。
方法 添加了operator
修饰,即 委托操作符的重载。
示例代码
++ – 重载
data class Point(var x: Int = 0, var y: Int = 0) {
operator fun inc(): Point {
return Point(this.x + 1, this.y + 1);
}
operator fun dec(): Point {
return Point(this.x - 1, this.y - 1);
}
}
fun main(args: Array<String>) {
var pt = Point(0, 0)
pt++
pt--
pt--
println("pt: $pt")
}
// 输出结果
pt: Point(x=-1, y=-1)
文档
文章来源:https://blog.csdn.net/w709835509/article/details/135466655
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!