手记

C++能做的,Kotlin也能做到:运算符重载总结

运算符的重载是一个十分方便的特性,它让代码看起来更加的直观,写起来也更加的方便。在学C++的时候就十分喜欢这一语言特性。然而Java却对这一点没有任何的支持。现在同样作为JVM语言的Kotlin加入了运算符重载这一语言特性。接下来让我们看看,在Kotlin中究竟有哪些运算符可以重载呢?

一元运算符

表达式对应的函数说明
+aa.unaryPlus()
-aa.unaryMinus()取反
!aa.not()非运算

自加、自减

表达式对应的函数说明
a++a.inc()自增
a--a.dec()自减

二元运算符

表达式对应的函数说明
a + ba.plus(b)
a - ba.minus(b)
a * ba.times(b)
a / ba.div(b)
a % ba.rem(b), a.mod(b) (弃用)取模
a..ba.rangeTo(b)从a到b的区间

in运算符

表达式对应的函数说明
a in bb.contains(a)b包含a
a !in b!b.contains(a)b不包含a

下标访问

表达式对应的函数说明
a[i]a.get(i)获取位置i的值
a[i, j]a.get(i, j)获取位置 i 和 j 的值
a[i_1, ..., i_n]a.get(i_1, ..., i_n)获取 i_1到i_n的值
a[i] = ba.set(i, b)将位置 i 的值设置为 b
a[i, j] = ba.set(i, j, b)将位置 i 和 j 的值设置为 b
a[i_1, ..., i_n] = ba.set(i_1, ..., i_n, b)将 i_1到i_n 的值设为b

调用(invoke)

表达式对应的函数说明
a()a.invoke()无参调用
a(i)a.invoke(i)带一个参数的调用
a(i, j)a.invoke(i, j)带两个参数的调用
a(i_1, ..., i_n)a.invoke(i_1, ..., i_n)带n个参数的调用

增量运算

表达式对应的函数说明
a += ba.plusAssign(b)
a -= ba.minusAssign(b)
a *= ba.timesAssign(b)
a /= ba.divAssign(b)
a %= ba.remAssign(b), a.modAssign(b) (弃用)

相等运算

表达式对应的函数说明
a == ba?.equals(b) ?: (b === null)
a != b!(a?.equals(b) ?: (b === null))

比较运算

表达式对应的函数说明
a > ba.compareTo(b) > 0a大于b
a < ba.compareTo(b) < 0a 小于b
a >= ba.compareTo(b) >= 0a大于等于b
a <= ba.compareTo(b) <= 0a小于等于b

使用实例

class Complex(val real:Int,val virtual:Int){    //对加号进行重载
    operator fun plus(complex: Complex)=Complex(this.real+complex.real,            this.virtual+complex.virtual)    override fun toString(): String {        return "($real,$virtual)"
    }
}fun main(args: Array<String>) {    val com1=Complex(12,10)    val com2=Complex(10,21)    val result=com1 + com2
    println("${com1.toString()}+${com2.toString()}=${result.toString()}")
}

运行结果:

(12,10)+(10,21)=(22,31)

原文链接:http://www.apkbus.com/blog-822717-72685.html

0人推荐
随时随地看视频
慕课网APP