Object expression(表达式)

  • 用于匿名内部类
  1. //object继承于MouseAdapter
  2. window.addMouseListener(object : MouseAdapter() {
  3. override fun mouseClicked(e: MouseEvent) {
  4. // ...
  5. }
  6. override fun mouseEntered(e: MouseEvent) {
  7. // ...
  8. }
  9. })
  • 父类默认构造函数有参数,需要显式的继承
open class A(x: Int) {
    public open val y: Int = x
}

interface B {...}

//需要显式的继承A带有默认参数的构造函数
val ab: A = object : A(1), B {
    override val y = 15
}
  • 不想继承父类,可以直接不写(默认继承至 Any )
//直接单纯当做一个bean对象使用
val point = object {
    var x: Int = 0
    var y: Int = 0
}
print(point.x + point.y)

Object 声明

  • Object 用来声明单例
//声明单例对象 DataProviderManager
object DataProviderManager {
    fun registerDataProvider(provider: DataProvider) {
        // ...
    }

    val allDataProviders: Collection<DataProvider>
        get() = // ...
}

//直接使用
DataProviderManager.registerDataProvider(...)

//可以继承父类声明
object DefaultListener : MouseAdapter() {
    override fun mouseClicked(e: MouseEvent) {
        // ...
    }
}

注:Object的声明不能在函数中,但可以放在其他Object声明或者类声明中

  • 协同companion做静态初始化模块(companion object)
class MyClass {
    //注: Factory的命名可以省略
    companion object Factory {
        fun create(): MyClass = MyClass()
    }
}

//调用
MyClass.create()