Object expression(表达式)
- 用于匿名内部类
//object继承于MouseAdapter
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
// ...
}
override fun mouseEntered(e: MouseEvent) {
// ...
}
})
- 父类默认构造函数有参数,需要显式的继承
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()