在Kotlin中, 定义单例将是一件十份简单的事。下面就是Kotlin下定义的单例:

object DataProviderManager {
fun registerDataProvider(provider: DataProvider) {
// ...
}
val allDataProviders: Collection<DataProvider>
get() = // ...
}

这叫对象声明,它通过有一个名称跟在关键字​​object​​,有点像变量声明。对象声明不是一个表达式,因此不能将它用在赋值语句的右边。对象声明的初始化是线程安全,并且是第一次访问时完成的。为了引用这个对象,我们可以直接用它的名称:

DataProviderManager.registerDataProvider(...)

对象声明也可以有超类型,如:

object DefaultListener : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) { ... }
override fun mouseEntered(e: MouseEvent) { ... }
}