Kotlin學習 Kotlin物件表示式和物件宣告

2021-10-19 09:41:47 字數 2487 閱讀 8955

kotlin 用物件表示式和物件宣告來實現建立乙個對某個類做了輕微改動的類的物件,且不需要去宣告乙個新的子類

通過物件表示式實現乙個匿名內部類的物件用於方法的引數中

window.addmouselistener(object : mouseadapter() 

override fun mouseentered(e: mouseevent)

})

物件可以繼承於某個基類,或者實現其他介面

open class a(x: int) 

inte***ce b

val ab: a = object : a(1), b

如果超型別有乙個建構函式,則必須傳遞引數給它。多個超型別和介面可以用逗號分隔。

通過物件表示式可以越過類的定義直接得到乙個物件

fun main(args: array) 

println(site.name)

println(site.url)

}

請注意,匿名物件可以用作只在本地和私有作用域中宣告的型別。如果你使用匿名物件作為公有函式的 返回型別或者用作公有屬性的型別,那麼該函式或屬性的實際型別 會是匿名物件宣告的超型別,如果你沒有宣告任何超型別,就會是 any。在匿名物件 中新增的成員將無法訪問

class c 

// 公有函式,所以其返回型別是 any

fun publicfoo() = object

fun bar()

}

在物件表達中可以方便的訪問到作用域中的其他變數

fun countclicks(window: jcomponent) 

override fun mouseentered(e: mouseevent)

})// ……

}

kotlin 使用 object 關鍵字來宣告乙個物件。

kotlin 中我們可以方便的通過物件宣告來獲得乙個單例

object dataprovidermanager 

val alldataproviders: collectionget() = // ……

}

引用該物件,我們直接使用其名稱即可

dataprovidermanager.registerdataprovider(……)
當然你也可以定義乙個變數來獲取獲取這個物件,當時當你定義兩個不同的變數來獲取這個物件時,你會發現你並不能得到兩個不同的變數。也就是說通過這種方式,我們獲得乙個單例

var data1 = dataprovidermanager

var data2 = dataprovidermanager

data1.name = "test"

print("data1 name = $")

例項

以下例項中,兩個物件都輸出了同乙個 url 位址

object site 

fun main(args: array)

輸出結果為

www.runoob.com

www.runoob.com

物件可以有超型別

object defaultlistener : mouseadapter() 

override fun mouseentered(e: mouseevent)

}

與物件表示式不同,當物件宣告在另乙個類的內部時,這個物件並不能通過外部類的例項訪問到該物件,而只能通過類名來訪問,同樣該物件也不能直接訪問到外部類的方法和變數

class site  // 錯誤,不能訪問到外部類的方法和變數}}

}fun main(args: array)

類內部的物件宣告可以用 companion 關鍵字標記,這樣它就與外部類關聯在一起,我們就可以直接通過外部類訪問到物件的內部元素

class myclass 

}val instance = myclass.create() // 訪問到物件的內部元素

我們可以省略掉該物件的物件名,然後使用 companion 替代需要宣告的物件名

class myclass 

}val x = myclass.companion

注意:乙個類裡面只能宣告乙個內部關聯物件,即關鍵字 companion 只能使用一次。

請伴生物件的成員看起來像其他語言的靜態成員,但在執行時他們仍然是真實物件的例項成員。例如還可以實現介面

inte***ce factory

class myclass

}

物件表示式和物件宣告之間有乙個重要的語義差別:

Kotlin學習 Kotlin委託

委託模式是軟體設計模式中的一項基本技巧。在委託模式中,有兩個物件參與處理同乙個請求,接受請求的物件將請求委託給另乙個物件來處理。kotlin 直接支援委託模式,更加優雅,簡潔。kotlin 通過關鍵字 by 實現委託 類的委託即乙個類中定義的方法實際是呼叫另乙個類的物件的方法來實現的。以下例項中派生...

kotlin學習筆記(5)Kotlin 類與物件

讀書學習筆記 kotlin 開發快速入門與實戰 通過把書中的內容 複述一遍,把 敲一遍,達到複習效果 主要內容 這裡所說的物件導向 是指物件導向程式設計 oop 物件導向包括三個部分 物件導向分析 ooa 物件導向設計 ood 物件導向程式設計 oop 5.1.1 類 萬事萬物都具有其自身的屬性和方...

Kotlin學習 Kotlin列舉類

列舉類最基本的用法是實現乙個型別安全的列舉。列舉常量用逗號分隔,每個列舉常量都是乙個物件 enum class color每乙個列舉都是列舉類的例項,它們可以被初始化 enum class color val rgb int 預設名稱為列舉字元名,值從0開始。若需要指定值,則可以使用其建構函式 en...