回到目錄
項(xiàng)目源碼 kotlin-class 項(xiàng)目
Kotlin 提供了語言層面的對(duì)單例模式的支持, 只需要用 object
關(guān)鍵字代替 class
來
聲明一個(gè)類即可.
object
類中可以有屬性, 方法, 但是不能有構(gòu)造函數(shù)(這是顯而易見的, 對(duì)吧).
可以直接用類名去引用屬性和方法.
// 單例模式
object SingletonDemo {
val username: String get() = "root"
var password: String = ""
fun getInfo() = "username: $username, password: $password"
}
fun main(args: Array<String>) {
val info: String
SingletonDemo.password = "123456"
info = SingletonDemo.getInfo() // object 類使用時(shí)直接用類名就可以了
println(info)
}
上面代碼輸出結(jié)果是:
username: root, password: 123456
對(duì)象表達(dá)式
object
關(guān)鍵字還可以用來創(chuàng)建對(duì)象表達(dá)式, 即一個(gè)匿名類的對(duì)象, 也稱匿名對(duì)象.
使用場(chǎng)景跟 java 中匿名內(nèi)部類中的使用場(chǎng)景一樣:
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
// ...
}
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
可以把對(duì)象表達(dá)式賦值給一個(gè)變量, 這個(gè)變量就引用了該對(duì)象.
open class ObjExpDemo {
fun sayHi() = println("Hi")
open fun sayHello() = println("Hello")
}
fun main(args: Array<String>) {
val codergege = object: ObjExpDemo() {
override fun sayHello() {
println("Hello~~")
}
}
with(codergege) {
sayHi()
sayHello()
}
}
輸出結(jié)果是:
Hi
Hello~~