原文:Kotlin學習快速入門(10)—— 重載運算符使用 - Stars-One的雜貨小窩 Kotlin中提供了基礎的運算符,但是只是針對基礎的數據類型,如Int,Double等 如果我們想讓兩個對象可以相加的功能,這個時候可以使用重載運算符的功能來實現 介紹 首先,先介紹下什麼是運算符,如以下代 ...
原文: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
}
參考
提問之前,請先看提問須知 點擊右側圖標發起提問 或者加入QQ群一起學習 TornadoFx學習交流群:1071184701