Kotlin基础 - 第八章运算符重载

kotlin中的运算符重载



#### [kotlin官方文档 https://www.kotlincn.net/docs/reference/](https://www.kotlincn.net/docs/reference/) ####

内容参考《Kotlin实战》

什么是运算符重载?

简单来说,就是 Kotlin 通过调用自己代码中定义特定的函数名的函数(成员函数或者扩展函数),并且用 operator 修饰符标记,来实现特定的语言结构,例如如果你在一个类上面定义了一个特定函数命名 plus 的函数,那么按照 Kotlin 的约定,可用在这个类的实例上使用 + 运算符,下面是代码。

用于重载运算符的所有函数都必须使用 operator 关键字标记。

	data class Foo(val x: Int, val y: Int) {
	    operator fun plus(instance: Foo) = Foo(x + instance.x, y + instance.y)
	
	    override fun toString(): String {
	       return "$x + ${y}i"
	    }
	}
	
	
	fun main(args: Array<String>) {
	    var aFoo = Foo(2, 5)
	    var otherFoo = Foo(4, 5)
	
	    println(aFoo + otherFoo)
		// 6 + 10i
	}

那么Java如何调用运算符函数呢?

重载的运算符实际上是被定义成一个函数,Java调用Kotlin运算符就跟调用普通函数一样调用就行。

重载算术运算符

算术运算符包括二元运算符、复合赋值运算符、一元运算符,当 Kotlin 在给一个集合添加元素的时候,是调用 add 方法,用到重载的话,我们就可以直接用 += 来进行这个操作,就会显得更加的优雅。。。

	//为类增加扩展函数	
	fun Any.println() = println(this)
	
	
	fun main(args: Array<String>) {
	    val list = arrayListOf<String>()
	    list.add("a")
	    list.println()
		//[user, admin, a]

	    list += "zbc"
		//[user, admin,a, zbc]
	    list.println()
	}
重载二元算术运算符

二元算术运算符就是常见的 +、-、*、/ 和取余 %,优先级与数学的是一样的,*、/% 要高于 +、- 的优先级。

下面我们列举对应的函数名:

表达式 函数名
a * b times
a / b div
a % b rem,mod(弃用)
a + b plus
a - b minus

下面我们来写个类,里面包含这几种函数,同时还有扩展函数的定义。

	data class Foo(val x: Int, val y: Int) {
	    operator fun plus(instance: Foo) = Foo(x + instance.x, y + instance.y)
	
	
	    operator fun div(instance: Foo) = Foo(x / instance.x, y / instance.y)
	
	    operator fun times(instance: Foo) = Foo(x * instance.x, y * instance.y)
	
	    operator fun rem(instance: Foo) = Foo(x % instance.x, y % instance.y)
	
	    operator fun minus(instance: Foo) = Foo(x  - instance.x, y -  instance.y)
	
	    override fu
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值