Kotlin 提供了语言层面的对单例模式的支持, 只需要用 object
关键字代替 class
来
声明一个类即可.
object
类中可以有属性, 方法, 但是不能有构造函数(这是显而易见的, 对吧).
可以直接用类名去引用属性和方法.
// 单例模式
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 类使用时直接用类名就可以了
println(info)
}
上面代码输出结果是:
username: root, password: 123456
对象表达式
object
关键字还可以用来创建对象表达式, 即一个匿名类的对象, 也称匿名对象.
使用场景跟 java 中匿名内部类中的使用场景一样:
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
// ...
}
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
可以把对象表达式赋值给一个变量, 这个变量就引用了该对象.
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()
}
}
输出结果是:
Hi
Hello~~
网友评论