Kotlin操作符的重载

操作符:像是+,-,*,/,!,==,a[i]等等都是操作符,当我们在使用这些操作符的时候,就相当于调用了一些内置的方法,这些方法是用保留的操作符关键字标识的方法。文末有操作符和对应方法的表。

我们可以重载这个方法,然后重新写入我们自己的逻辑行为。
重载操作符方法要使用operator关键字。

扩展函数中的操作符方法:

  • 举例1:
val mylist= listOf(23,42,22,55,12)

//重写mylist[i]的mylist的内置方法get(i)方法

operator fun List.get(postion:Int):Int=mylist[postion]+10

val x=mylist[2]
//如果不重写方法的话,x是等于22;重写方法之后x就会等于32.
  • 举例2:
//重载ViewGroup中的get方法,实现获取ViewGroup中的子控件。
operator fun ViewGroup.get(position: Int): View = getChildAt(position)

//使用重载的get方法获取子控件
val container: ViewGroup = find(R.id.container)
val view = container[2]
//相当于
val view = container.getChildAt(2)

在自己的类中重载操作符方法:

data class Person(val address:String,val student:List){
     operator fun get(postion:Int):String=student[position]
}
val student=listof("li","wang","liu","zhang","lin","qian")
val p=Person("beijing",student)
//本来p不是一个列表,想取student中的数据需要一级一级调用:```p.student[i]```。重载方法之后只需要p[i]
val name=p[2]//name的值就是liu

重载操作符的对应的内置方法可以在适当的情况下让我们简化代码等好处。

一元二元操作符对应的函数.png
数组操作符对应的函数.png
等于操作符对应的函数

相等操作符有一点不同,为了达到正确合适的相等检查做了更复杂的转换,因为要得到一个确切的函数结构比较,不仅仅是指定的名称。方法必须要如下准确地被实现:
operator fun equals(other: Any?): Boolean
操作符 === 和 !== 用来做身份检查(它们分别是Java中的 == 和 != ),并且它们不能被重载。

函数调用对应的函数.png

你可能感兴趣的:(Kotlin操作符的重载)