object
天然的單例
- 語法含義:將類的聲明和定義該類的單例對象結合在一起(即通過object就實現了單例模式)
object List {
fun method(){
println("天然的單例")
}
}
-
即將class關鍵字替換爲object關鍵字,來聲明一個類,與此同時也聲明它的一個對象。
-
也可以定義在一個類的內部
class List {
object List {
fun method() {
println("天然的單例")
}
}
}
伴生對象
(1)、在Kotlin中是沒有static關鍵字的,也就是意味着沒有了靜態方法和靜態成員。那麼在kotlin中如果要想表示這種概念,取而代之的是包級別函數(package-level function)和我們這裏提到的伴生對象。
package oop
class Son{
companion object {
val age = 22
}
}
fun Son.Companion.foo() {
println("age = $age")
}
fun main(args:Array<String>) {
Son.foo()
}
伴生對象也可以聲明在一個類的內部,使用如下的方式調用
class Object{
companion object myObject {
val tmp = 1
fun method() {
println("i am in companion object")
}
}
}
fun main(args:Array<String>) {
Object.method()
Object.myObject.method()
}
(2)、在類體外調用class.compaion 的方式爲伴生對象聲明一個函數
package oop
class student{
companion object {
val age = 22
}
}
fun student.Companion.foo() {
println("age = $age")
}
fun main(args:Array<String>) {
student.foo()
}