kotlin之操作符重载

一元操作符

表达式对应的函数
+aa.unaryPlus()
-aa.unaryMinus()
!aa.not()
a++a.inc()
a--a.dec()

 

fun main(arg: Array<String>) {
    var a = "a"
    println(a++)
    println(a)
    println(++a)
}
operator fun String.inc():String{//重载String的++
    return this +this
}

二元操作符

表达式对应的函数
a+ba.plus(b)
a-ba.minus(b)
a*ba.tims(b)
a/ba.div(b)
a%ba.mod(b)
a.ba.rangeTo(b)
a in bb.contains(a)
a !in b!b.contains(a)

 

fun main(arg: Array<String>) {
   var s= "hello"
    print(s*10)

}
//重载乘法操作符
operator fun String.times(other:Any?):String{
    var  result = ""
    if (other!= null){
        if (other is Int)
            for (i in 1..other){
                result+=this
            }
    }
    return result
}

方括号操作符重载

表达式对应的函数
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]=ba.set(i,j,b)
a..ba.rangeTo(b)
a[i_1,...,i_n]=ba.set(i_1,..i_n,b)

 

fun main(arg: Array<String>) {
    val arr1 :Array<Any> = arrayOf("3", "2")
    val arr2 :Array<Any> = arrayOf("9", "8")

    println("arr1[1] = ${arr1[1]}")
    println("arr2[1] = ${arr2[1]}")

    val arr3 = arrayOf(arr1, arr2)
    println("arr3[0][0] = ${arr3[0][0]}")


}
//重载一维数组[i]操作符
operator fun Array<Any>.get(i:Int):Int{
    if (this[i] is Int){
        return this[i] as Int
    }else if (this[i] is String){
        try {
            return this[i].toString().toInt()
        }catch (e:Exception){

        }
    }
    return 0
}
//重载二维数组[i][j]操作符
operator fun Array<Array<Any>>.get(i:Int,j:Int):Int{
    if (this[i][j] is Int){
        return this[i][j] as Int
    }else if (this[i][j] is String){
        try {
            return this[i][j].toString().toInt()
        }catch (e:Exception){

        }
    }
    return 0
}


赋值操作符重载

表达式 对应的函数
a+=b a.pulsAssign(b)
a-=ba.minusAssign(b)
a*=ba.timesAssign(b)
a/=ba.divAssign(b)
a%=ba.modAssign(b)

 

 

fun main(arg: Array<String>) {
    val myString = myString()
    myString.value="sss"
    myString*=3
    print(myString)


}
class myString{
    var value :String = "hello"
    override fun toString(): String {
        return "myString(value='$value')"
    }

}

operator fun myString.timesAssign(n:Int):Unit{
    val v =this.value
    for (i in 1..n-1)
        this.value+=v
}

 

逻辑操作符重载

 

表达式对应的函数
a>ba.compaerTo(b)>0
a<ba.compaerTo(b)<0
a>=ba.compaerTo(b)>=0
a<=ba.compaerTo(b)<=0
a==ba?.equals(b)?(b==null)
a!=b!a?.equals(b)?(b==null)

 

fun main(arg: Array<String>) {

    val myClass1 = myClass(1, 2)
    val myClass2 = myClass(1, 2)
    val myClass3 = myClass(3, 4)
    println(myClass1 == myClass2)
    println(myClass3 == myClass2)
}

class myClass(a: Int, b: Int) {
    private var a: Int = a
    private var b: Int = b
    operator fun compareTo(c: myClass): Int {
        var m = this.a + this.b
        var n = c.a + c.b
        return m - n

    }


    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        if (javaClass != other?.javaClass) return false

        other as myClass

        if (a != other.a) return false
        if (b != other.b) return false

        return true
    }

    override fun hashCode(): Int {
        var result = a
        result = 31 * result + b
        return result
    }


}

 

转载于:https://www.cnblogs.com/loaderman/p/10148524.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值