对象表达式&对象声明

对象表达式:Object expression

对象表达式是一种结构,用来创建一个object的实例
举个栗子:

val coords = object {
    var x = 10
    var y = 10
}

和Java中的匿名函数是一个死样子:

window.addMouseListener(object : MouseAdapter() {
    override fun mouseClicked(e: MouseEvent) { …… }

    override fun mouseEntered(e: MouseEvent) { …… }
})

对象声明:Object declaration

基本是个单例声明啊,比如

object HttpService {
val api = retrofit.create(Api::class.java)
fun post(url: String) = api.post(url)
}

这里的HttpService是个class好不啦,而且只会有一个instance,所以可以直接调用其中定义的函数:

HttpService.post("wwww.myurl.com/event")

val service: HttpService = HttpService
service.post("wwww.myurl.com/event")

的效果是一毛一样的。

伴生对象:Companion object

伴生对象其实就是一个对象声明
只是他存在的位置在class里面鹅已。

class MyClass {
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

使用的时候把这货当做Java中的静态字段什么的用就可以了。但是切记它其实是一个类的实例。

你可能感兴趣的:(对象表达式&对象声明)