首发于公众号: 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 == b
和a != b
这两个操作符,直接看后面的翻译,我们摸不着头脑不知道要怎么重载。
open operator fun equals(other: Any?): Boolean
这里要注意,要完全一致,包括上面的所有的操作符,复写的时候包括类型、返回值等要完全相同,才可以去使用前面的操作符。即上面的==
复写,必须要Any?
并且返回Boolean
Kotlin学习笔记之 13 基础操作符run、with、let、also、apply
网友评论