在Java中,运算符基本是用于数字的计算:+ - * / % ++ –。在Kotlin中通过对运算符进行重载,允许任意两个对象进行相加,或者是进行更多其他的运算操作。
1、语法结构
class Obj {operator fun plus(obj: Obj): Obj { // 处理相加的逻辑}
}val obj1 = Obj()
val obj2 = Obj()
val obj3 = obj1 + obj2
2、实例,实现一个Money类,重载plus方法:
class Money(val value: Int) {var sum: Int = 0operator fun plus(money: Money): Money {sum = value + money.valuereturn Money(sum)}
}
调用实现:
fun main() {val money1 = Money(5)val money2 = Money(6)val money3 = money1 + money2;println(money3.value)
}//结果
11
上面例子就使用运算符重载实现了让两个Money对象相加的功能。Kotlin的语法糖,看下反编译后的Java代码:
Money money1 = new Money(5);
Money money2 = new Money(6);
Money money3 = money1.plus(money2);
看上面Java代码可以看到,运算符在编译时会替换成方法的调用,+替换成plus方法,Kotlin的每个运算符都有其对应的方法,其他同理也可以这样重载使用。
3、当然对象还可以和数字相加,在上面基础上我们在加一个重载方法
class Money(val value: Int) {var sum: Int = 0operator fun plus(money: Money): Money {sum = value + money.valuereturn Money(sum)}operator fun plus(newValue: Int): Money {sum = value + newValuereturn Money(sum)}
}
测试代码
fun main() {val money1 = Money(5)val money2 = Money(6)val money3 = money1 + money2;val money4 = money1 + 20;println(money3.value)println(money4.value)
}//结果
11
25
反编译后的Java代码:
Money money1 = new Money(5);
Money money2 = new Money(6);
Money money3 = money1.plus(money2);
Money money4 = money1.plus(20);