发布于2022年11月4日3年前 原文:Kotlin学习快速入门(10)—— 重载运算符使用 - Stars-One的杂货小窝 Kotlin中提供了基础的运算符,但是只是针对基础的数据类型,如Int,Double等 如果我们想让两个对象可以相加的功能,这个时候可以使用重载运算符的功能来实现 介绍 首先,先介绍下什么是运算符,如以下代码: val a = 2 val b = 3 val result =a + b 这里的+就是运算符,实际上这里的a+b等同a.plus(b) 这里相当于语法糖的意思,实际上+是调用的plus()方法 重载运算符的关键字为operator,具体可重载的运算符如下表所示: 表达式 实际调用方法 a * b a.times(b) a / b a.div(b) a % b a.mod(b) a + b a.plus(b) a - b a.minus(b) 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) a != b !a.equals(b) a in b b.contains(a) a !in b !b.contains(a) a > b a.compareTo(b) > 0 a < b a.compareTo(b) < 0 a >= b a.compareTo(b) >= 0 a <= b a.compareTo(b) <= 0 +a a.unaryPlus() -a a.unaryMinus() !a a.not() ++a,a++ a.inc() --a, a-- a.dec() 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) 可能罗列的不全,具体参考运算符重载 | Kotlin 下面我们以*为例,重载运算符来实现一个逻辑 在类中重载运算符 我们有个这样的代码 fun main() { val list = arrayListOf<Teacher>() repeat(3) { val student =Teacher("test") list.add(student) } } class Teacher(name:String) 上面的代码是循环3次,并创建了Teacher对象,并添加到List中,实际上我们可以重载运算符,对Teacher类改造一下: class Teacher(name: String) { operator fun times(n: Int): List<Teacher> { val list = arrayListOf<Teacher>() repeat(n){ val temp = copyBean(this) list.add(temp) } return list } } 然后使用就变为下面: fun main() { val student = Teacher("test") //相当于此代码 //val list= student.times(3) val list = student * 3 } 注意: 实际上,重载运算符相当于重载运算符对应的方法而已 方法的参数类型和返回类型,根据需要定义即可,不一定需要那么死板 使用扩展来重载运算符 上面提高的示例就是在类中进行重载,我们也可以通过扩展来实现给某个类的运算符进行重载 我们还是以上面的Teacher为例 class Teacher(name: String) //扩展给Teacher加上重载运算符 operator fun Teacher.times(n: Int): List<Teacher> { val list = arrayListOf<Teacher>() repeat(n) { val temp = copyBean(this) list.add(temp) } return list } 参考 运算符重载 | Kotlin Kotlin核心语法(五):运算符重载以及其它的约定 - SegmentFault 思否 提问之前,请先看提问须知 点击右侧图标发起提问 http://wpa.qq.com/pa?p=2:1053894518:52或者加入QQ群一起学习 TornadoFx学习交流群:1071184701
创建帐户或登录后发表意见