对象声明与对象表达式

回到目录
项目源码 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~~

回到目录

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容