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进行投诉反馈,一经查实,立即删除!