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

results matching ""

    No results matching ""