继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Kotlin学习:运算符重载

闲筝听雨
关注TA
已关注
手记 14
粉丝 7
获赞 31

Kotlin的运算符都是靠特定名称的方法支撑的,因此只要重载这些名称的方法,我们就可以为任意类添加这些运算符。
重载运算符的方法需要用operator修饰符进行标记。
1、重载单目前缀运算符
单目前缀运算符有"+","-","!"
单目前缀运算符及对应的方法

fun main(args: Array<String>) {
    val data: Data = Data(3, 4)
    //输出:+data : x = 4, y = 5
    println("+data : ${+data}")
    //输出:-data : x = 2, y = 3
    println("-data : ${-data}")
    //输出:!data : x = -3, y = -4
    println("!data : ${!data}")
}

class Data(val x: Int, val y: Int) {
    operator fun unaryPlus(): Data {
        return Data(x + 1, y + 1)
    }

    operator fun unaryMinus(): Data {
        return Data(x - 1, y - 1)
    }

    operator fun not(): Data {
        return Data(-x, -y)
    }

    override fun toString(): String {
        return "x = ${x}, y = ${y}"
    }
}

2、自加和自减运算符
自加:++,自减:–
自加和自减运算符及对应的方法

fun main(args: Array<String>) {
    var data: Data = Data(3, 4)
    //输出:+data : x = 4, y = 5
    println("data++ : ${data++}")
    //输出:-data : x = 2, y = 3
    println("data-- : ${data--}")
}

class Data(var x: Int, var y: Int) {
    operator fun inc(): Data {
        return Data(x++, y++)
    }

    operator fun dec(): Data {
        return Data(x--, y--)
    }

    override fun toString(): String {
        return "x = ${x}, y = ${y}"
    }
}

3、双目算术运算符
双目算术运算符及对应的方法
例子同以上,重载其对应方法即可
4、in和!in运算符
in和!in运算符及其对应的方法
例子同以上,重载其对应方法即可
5、索引访问运算符
索引访问运算符及对应的方法

fun main(args: Array<String>) {
    var str = "fkjava.org"
    //根据get方法来获取指定索引处的字符,输j
    println(str.get(2))
    //使用索引访问运算符来获取指定索引处的字符,输出j
    println(str[2])
    var list = ArrayList<String>()
    list.add("Java")
    list.add("Kotlin")
    list.add("Go")
    //使用索引访问运算符来获取指定索引处的字符,输出Kotlin
    println(list[1])
    list[2] = "Swift"
    //使用索引访问运算符来修改指定索引处的字符,输出[Java,Kotlin,Swift]
    println(list)
}

6、调用运算符
调用运算符及对应的方法

fun main(args: Array<String>) {
    val str = "java.lang.String"
    val mtd = Class.forName(str).getMethod("length")
    //使用传统方法,使用Method对象的invoke方法,输出4
    println(mtd.invoke("Java"))
    //使用调用运算符,输出4
    println(mtd("Java"))
}
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP