Kotlin学习笔记之 24 操作符重载

222 阅读1分钟

首发于公众号: DSGtalk1989

24.操作符重载

  • 操作符方法对应表
表达式 翻译为
+a a.unaryPlus()
-a a.unaryMinus()
!a a.not()
a++ a.inc()
a-- a.dec()
a + b a.plus(b)
a - b a.minus(b)
a * b a.times(b)
a / b a.div(b)
a % b a.rem(b)
a..b a.rangeTo(b)
a in b b.contains(a)
a !in b !b.contains(a)
a[i] a.get(i)
a[i, j] a.get(i, j)
a[i_1, ..., i_n] a.get(i_1, ..., i_n)
a[i] = b a.set(i, b)
a[i, j] = b a.set(i, j, b)
a[i_1, ..., i_n] = b a.set(i_1, ..., i_n, b)
a() a.invoke()
a(i) a.invoke(i)
a(i_1, ..., i_n) a.invoke(i_1, ..., i_n)
a += b a.plusAssign(b)
a -= b a.minusAssign(b)
a *= b a.timesAssign(b)
a /= b a.divAssign(b)
a %= b a.remAssign(b)
a == b a?.equals(b) ?: (b === null)
a != b !(a?.equals(b) ?: (b === null))
a > b a.compareTo(b) > 0
a < b a.divAssign(b)
a >= b a.compareTo(b) >= 0
a <= b a.compareTo(b) <= 0

针对以上表格中列出来的所有,我们均可以通过operator fun的方式修改

class Person(var name: String, var age: Int) {
    override fun toString(): String {
        return "name $name  age  $age"
    }
}

fun main() {
    var a = Person("33", 6)
    a++
    println(a)
}

operator fun Person.inc() = Person(name, age + 1)

上面需要说明的是,一般的操作符重载我们不需要再过多的阐述,对于a == ba != b这两个操作符,直接看后面的翻译,我们摸不着头脑不知道要怎么重载。

open operator fun equals(other: Any?): Boolean

这里要注意,要完全一致,包括上面的所有的操作符,复写的时候包括类型、返回值等要完全相同,才可以去使用前面的操作符。即上面的==复写,必须要Any?并且返回Boolean