对象声明与对象表达式

2018-11-26  本文已影响0人  codergege

回到目录
项目源码 kotlin-class 项目


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~~

回到目录

上一篇 下一篇

猜你喜欢

热点阅读