Kotlin學習快速入門(10)—— 重載運算符使用

原文:Kotlin學習快速入門(10)—— 重載運算符使用 - Stars-One的雜貨小窩

Kotlin中提供了基礎的運算符,但是隻是針對基礎的數據類型,如Int,Double等

如果我們想讓兩個對象可以相加的功能,這個時候可以使用重載運算符的功能來實現

介紹

首先,先介紹下什麼是運算符,如以下代碼:

val a = 2
val b = 3
val result =a + b

這裏的+就是運算符,實際上這裏的a+b等同a.plus(b)

這裏相當於語法糖的意思,實際上+是調用的plus()方法

重載運算符的關鍵字爲operator,具體可重載的運算符如下表所示:

|表達式 |實際調用方法 |
|a * b|a.times(b) |
|a / b|a.div(b) |
|a % b|a.mod(b) |
|a + b|a.plus(b) |
|a - b|a.minus(b) |
|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.equals(b)
|a != b |!a.equals(b) |
|a in b |b.contains(a) |
|a !in b |!b.contains(a) |
|a > b |a.compareTo(b) > 0 |
|a < b |a.compareTo(b) < 0 |
|a >= b |a.compareTo(b) >= 0 |
|a <= b |a.compareTo(b) <= 0 |
|+a |a.unaryPlus() |
|-a |a.unaryMinus() |
|!a |a.not() |
|++a,a++ |a.inc() |
|--a, a-- |a.dec() |
|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] = b | a.set(i, j, b) |
|a[i_1, ..., i_n] = b | a.set(i_1, ..., i_n, b) |

可能羅列的不全,具體參考運算符重載 | Kotlin

下面我們以*爲例,重載運算符來實現一個邏輯

在類中重載運算符

我們有個這樣的代碼

fun main() {
    val list = arrayListOf<Teacher>()
    repeat(3) {
        val student =Teacher("test")
        list.add(student)
    }

}

class Teacher(name:String)

上面的代碼是循環3次,並創建了Teacher對象,並添加到List中,實際上我們可以重載運算符,對Teacher類改造一下:

class Teacher(name: String) {
    operator fun times(n: Int): List<Teacher> {
        val list = arrayListOf<Teacher>()
        repeat(n){
            val temp = copyBean(this)
            list.add(temp)
        }
        return list
    }
}

然後使用就變爲下面:

fun main() {
    val student = Teacher("test")
    //相當於此代碼
    //val list= student.times(3)
    val list = student * 3
}

注意:

實際上,重載運算符相當於重載運算符對應的方法而已

方法的參數類型和返回類型,根據需要定義即可,不一定需要那麼死板

使用擴展來重載運算符

上面提高的示例就是在類中進行重載,我們也可以通過擴展來實現給某個類的運算符進行重載

我們還是以上面的Teacher爲例

class Teacher(name: String) 

//擴展給Teacher加上重載運算符
operator fun Teacher.times(n: Int): List<Teacher> {
    val list = arrayListOf<Teacher>()
    repeat(n) {
        val temp = copyBean(this)
        list.add(temp)
    }
    return list
}

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章