Kotlin 操作符重载

Kotlin 操作符重载

Kotlin 通过 operator 关键字 修饰 操作符函数,来实现 操作符重载。
++ 操作,对应 inc 函数,-- 操作符,对应 dec 函数

举例,Point 类 实现 ++ 操作符重载:

class Point {
    operator fun inc(): Point {
        // 实现 ++ 重载
        return Point(x+1, y+1)
    }
}

说明:对象 遇到 操作符时,即调用 对应的 操作符函数。

操作符函数 根据 操作符 分类:

一元操作符

操作符重载函数名
a++a.inc()
a–a.dec()
!aa.not()
+aa.unaryPlus()
-aa.unaryMinus()

数学运算符

操作符重载函数名
a+ba.plus(b)
a-ba.mius(b)
a*ba.times(b)
a / ba.div(b)
a…ba.rangeTo(b)
a…<ba.rangeUtil(b)

相等操作符

操作符重载函数名
a == ba?.equals(b) ?: (b === null)
a != b!(a?.equals(b) ?: (b === null)),即 相等的 取反

比较操作符

实现了 Comparable 接口的 compareTo 方法,通过 其返回值比较。

操作符重载函数名
a > ba.compareTo(b) > 0
a < ba.compareTo(b) < 0
a >= ba.compareTo(b) >= 0
a <= ba.compareTo(b) <= 0

in 操作符

操作符重载函数名
a in ba.contains(b)
a !in b!a.contains(b)

索引 操作符

操作符重载函数名
a[i]a.get(i)
a[i] = ba.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)

属性委托操作符

在 属性委托 中,实现了 getValuesetValue 方法,实现 委托属性的 读写。
方法 添加了 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)

文档

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值