操作符的重载
kotlin 有一些固定数量象征性的操作符,可以在任何类中去引用它们, 就是创建一个方法, 方法名为保留的操作符的关键字,这样就可以将这个操作符的行为映射到这个方法,重载这些代码可以增加代码的可读性和简介性.
一元操作符表
操作符 | 函数 |
---|---|
+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.mod(b) |
a … b | a.rangTo(b) |
a in b | a.contains(b) |
a !in b | !a.contains(b) |
a += b | a.plusAssign(b) |
a -= b | a.minusAssign(b) |
a *= b | a.timesAssign(b) |
a /= b | a.divAssign(b) |
a %= b | a.modAssign(b) |
数组操作符
操作符 | 函数 |
---|---|
a[i] | a.get(i) |
a[i,j] | a.get(i,j) |
a[i_1, … , j_1] | a.get(i_1, … , j_1) |
a[i]=b | a.set(i,b) |
a[i,j]=b | a.set(i,j,b) |
a[i_1, … , j_1]=b | a.set(i_1, … , j_1,b) |
等于操作符
操作符 | 函数 |
---|---|
a == b | a?.equals(b) ?: b === null |
a != b | !a?.equals(b) ?: b === null |
?: 相当于一个简写的if语句,如果左面不是不是null,返回 ?: 左侧的内容,反之,右侧
相等操作符有一点不同的是,为了达到合适的相等检查做了复杂的转换,因为要得到一个确切的函数结构比较,不仅仅是指定的名称.方法必须要如下准确的实现:
operator fun equals(other: Any?): Boolean
操作符 === 和 !== 用来做身份检查,并且不能被重载
函数调用
函数 | 调用 |
---|---|
a(i) | a.invoke(b) |
a(i,j) | a.invoke(i,j) |
a(i_1,…,i_n) | a.invoke(i_!,…,i_n) |
举个例子:
kotlin是实现了 数组操作的所以我们可以像java中的数组一样访问list的每一项,除此之外,也可以修改list里面的元素
val x = myList[2]
myList[2] = 4
扩展函数的操作符
我们不需要去扩展自己的类,但是我们需要使用扩展函数扩展我们已经存在的类和第三方库.
operator fun ViewGroup.get(position: Int): View = getChildAt(position)
那么现在使用这个就会 从ViewGroup中 通过position得到一个 view
var container : ViewGroup=find(R.id.container)
var view =container[2]