Kotlin操作符的重载

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

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

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

  • 举例1:
val mylist= listOf<Int>(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<String>){
     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 ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,282评论 9 118
  • C++运算符重载-下篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 1,478评论 0 49
  • 又是一个寂静的清晨 , 湿漉漉的留着昨夜的雨痕, 鸟儿划过一道飞影 , 梧桐树下似有花香缤纷。 耳边回荡起呼唤的铃...
    牡丹员外阅读 361评论 3 6
  • 我们的车夫名叫约翰.曼力。约翰有妻子和孩子,他们一家人就住在马厩附近的小屋里。
    王晨旭阅读 214评论 0 0