object與companion object
Prerequisites:
object 類別
這裡的object,指的是就只有一個物件,不管被建立幾次,只會被建立一次。
Singleton的概念。
語法
object 類別名 {
}
使用方法
類別名.方法()
類別名.屬性名
建立object物件
1
2
3
4
5
6
7
8
9
object Single {
val name:String = "Single"
fun method1() {
println("method1")
}
fun method2() {
println("method2")
}
}
測試
1
2
3
4
5
6
7
8
fun main() {
Single.method1()
Single.method2()
println(Single.name)
println(Single.hashCode())
println(Single.hashCode())
println(Single.hashCode())
}
method1
method2
Single
1450495309
1450495309
1450495309
hashCode如同物件身份證,代表印出三次Single物件,hashCode都相同,代表同一個物件。
companion object
跟靜態內部類別一樣,用到的時候才會被載入。
class 外部類別 {
companion object {
變數
方法
}
}
程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Outter {
init {
println("建立外部類別")
}
companion object {
val info: String = "info"
init {
println("建立內部類別")
}
fun load() {
println("載入資訊...")
}
}
}
只能透過類別名,才能呼叫companion object建立的變數與方法。
類別名.方法
類別名.變數
以下會編譯錯誤。
1
2
3
4
5
6
fun main() {
val obj = Outter()
// 以下編譯錯誤
obj.info
obj.load()
}
透過外部類別名,才能取得方法與變數名。
1
2
3
4
fun main() {
Outter.load()
println(Outter.info)
}
載入資訊...
info