# 1. 運算符重載
對于運算符重載,這里需要首先了解一個符號和對應函數的關系:
| 符號 | 方法 |
| --- | --- |
| ` +` | `plus` |
| `+=` | `plusAssign` |
| `==` | `equals` |
| `> ` | `compareTo` |
| `[]` | `get` |
| `..` | `rangeTo` |
| `in` | `contains`|
# 2. 案例
## 2.1 +
~~~
class Person(var name: String, var age: Int, var man: Boolean){
var number = 1
operator fun plus(person: Person): Person{
this.age += person.age
this.number += person.number
return this
}
}
fun main() {
var person_1 = Person("張三", 23, true)
var person_2 = Person("張三", 22, true)
var person_3 = Person("張三", 21, false)
// 期望person_1 + person_2 + person_3直接得到總年齡大小
var total = person_1 + person_2 + person_3
println("總年齡:${total.age}, 總人數:${total.number}")
}
~~~
結果:
```
總年齡:66, 總人數:3
```
## 2.2 []
同樣的,可以定義一個存儲容器,然后使用`[]`操作符來進行下標訪問。
~~~
data class Person(var name: String, var int: Int, var sex: Boolean){
}
class Node(person: Person?) {
var person: Person? = person
var next: Node? = null
init {
this.next = null
}
}
class Persons {
var size = 0
var dummyNode = Node(null)
fun add(person: Person){
var newNode = Node(person)
newNode.next = dummyNode.next
dummyNode.next = newNode
size++
}
operator fun get(index: Int): Person?{
var i = index
var ptr: Node? = dummyNode
while(i >= 0){
ptr = ptr?.next
i--
}
return ptr?.person
}
}
fun main() {
var person_1 = Person("張三", 23, true)
var person_2 = Person("張三", 22, true)
var person_3 = Person("張三", 21, false)
var persons = Persons()
persons.add(person_1)
persons.add(person_2)
persons.add(person_3)
for(i in 0..(persons.size - 1)){
println(persons[i])
}
}
~~~
結果:
```
Person(name=張三, int=21, sex=false)
Person(name=張三, int=22, sex=true)
Person(name=張三, int=23, sex=true)
```
至于其余的方法這里就不再一一給出案例。
- Kotlin語言基礎
- Kotlin的簡介
- Kotlin的變量和常見數據類型
- Kotlin的區間
- Kotlin的位運算
- Kotlin的容器
- Kotlin類型檢查
- Kotlin的空值處理
- Kotlin的函數
- Kotlin的類
- Kotlin的委托
- Kotlin的延遲加載
- Kotlin的異常
- Kotlin的Lambda表達式
- Kotlin的高階函數
- Kotlin的標準庫中的高階函數
- Kotlin的泛型
- Kotlin的表達式
- Kotlin的解構
- Kotlin的運算符重載
- Kotlin語言中級
- Kotlin的擴展函數
- Kotlin的擴展屬性
- Kotlin的infix關鍵字
- Kotlin的DSL
- Kotlin的一些注解(和Java互調用)
- Kotlin的lateinit和by lazy
- Kotlin的反射
- Kotlin的匿名接口
- 安卓中的Kotlin
- 數據庫操作Room