Android开发Android进阶Android开发

Kotlin运算符重载

2019-06-26  本文已影响10人  程序员丶星霖

Kotlin的运算符都是靠着特定名称的方法支撑的,因此只要重载这些名称的方法,就可以为任意类型添加这些运算符。

重载运算符的方法需要用operato修饰符进行标记。

一、重载单目前缀运算符

为任意类定义名为unaryPlus()、unaryMinus()、not(),且以operator修饰的方法,程序即可对该类的实例使用+、-、!单目前缀运算符。

data class Data(val x: Int, val y: Int) {

    //为Data类定义一个unaryMinus()方法
    operator fun unaryMinus():Data{
        return Data(-x,-y)
    }

}
//以扩展方法的形式为Data类定义not()方法
operator fun Data.not(): Data {
    return Data(-x, -y)
}

fun main(args: Array<String>) {
    val d = Data(4, 10)
    println(-d)
    println(!d)
}

输出结果:

Data(x=-4, y=-10)
Data(x=-4, y=-10)

二、重载自加和自减运算符

为任意类定义名为inc()、dec(),且以operator修饰的方法,即可对该类的实例使用++、--运算符。

data class Data(val x: Int, val y: Int) {

    //为Data类定义一个inc()方法
    operator fun inc(): Data {
        return Data(x + 1, y + 1)
    }

}
//以扩展方法的形式为Data类定义dec()方法
operator fun Data.dec(): Data {
    return Data(x-1, y-1)
}

fun main(args: Array<String>) {
    var d = Data(4, 10)
    println(d++)
    println(d)
    var d2=Data(10,20)
    println(--d2)
    println(d2)
}

输出结果:

Data(x=4, y=10)
Data(x=5, y=11)
Data(x=9, y=19)
Data(x=9, y=19)

三、重载双目算术运算符

为任意类定义名为plus()、minus()、times()、div()、rem()、rangeTo(),且以operator修饰的方法,程序即可对该类的实例使用+、-、*、/、%等运算。

data class Data(val x: Int, val y: Int) {

    //为Data类定义一个minus()方法
    operator fun minus(target:Data): Double {
        return Math.hypot((this.x-target.x).toDouble(),(this.y-target.y).toDouble())
    }

}
//以扩展方法的形式为Data类定义dec()方法
operator fun Data.times(target: Data): Int {
    return Math.abs(this.x - target.x) * Math.abs(this.y - target.y)
}

fun main(args: Array<String>) {
    var d = Data(4, 10)
    var d2 = Data(10, 20)
    println("d与d2的距离为:${d - d2}")
    println("d与d2围城的矩形面积为:${d * d2}")
}

输出结果:

d与d2的距离为:11.661903789690601
d与d2围城的矩形面积为:60

学海无涯苦作舟

我的微信公众号.jpg
上一篇下一篇

猜你喜欢

热点阅读