2-6-广义赋值运算符
运算符 | 对应的方法 |
---|---|
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=a+b ,因此在程序中进 行 a+= b 运算时,往往并不需要 a 有 plusAssign()方法。 对于广义赋值操作,例如 a+= b , 编译器会先判断 plusAssign()方法是否存在,如果存在, 则按如下步骤执行。
如果 plus() 方法也存在, Kotlin 将会报告错误(调用的目标方法不确定)。
确保 plusAssign() 没有返回值,否则报告错误。
如果能通过前两步的检查,则转换为执行 a.plusAssign(b)。
示例
class Counter(var value: Int) {
// // 情况1:定义 plusAssign()
operator fun plusAssign(other: Int) {
value += other
println("plusAssign 被调用,当前 value=$value")
}
// 取消注释下面的方法会引发编译错误,因为和 plusAssign 冲突
operator fun plus(other: Int): Counter {
println("plus 被调用")
return Counter(value + other)
}
}
fun main() {
var c = Counter(10)
// 使用 += 运算符
// c += 5 // 错误: Ambiguity between assign operator candidates:
val counter = c + 5
println("最终 value=${c.value}")
println(counter.value)
}
Content copied to clipboard