有两种不同的object
用法,即expression和clarification。
对象表达
当类需要稍作修改时可以使用对象表达式,但是不必为其创建全新的子类。匿名内部类就是一个很好的例子。
button.setOnClickListener(object: View.OnClickListener() {
override fun onClick(view: View) {
}
})
需要注意的一件事是,匿名内部类可以从封闭范围访问变量,而这些变量不必是final
。这意味着在匿名内部类中使用的未考虑的final
变量在被访问之前可能会意外更改值。
对象声明
对象声明类似于变量声明,因此不能在赋值语句的右侧使用。对象声明对于实现Singleton模式非常有用。
object MySingletonObject {
fun getInstance(): MySingletonObject {
}
}
和getInstance
方法然后可以调用这个样子。
MySingletonObject.getInstance()
伴侣对象
伴随对象是对象声明的一种特定类型,它允许对象执行与其他语言(例如Java)中的静态对象相似的操作。companion
即使在Kotlin中不存在实际的静态概念,添加到对象声明也可以为对象添加“静态”功能。这是带有实例方法和伴随方法的类的示例。
class MyClass {
companion object MyCompanionObject {
fun actsAsStatic() {
}
}
fun instanceMethod() {
}
}
调用实例方法将如下所示。
var myClass = MyClass()
myClass.instanceMethod()
调用伴随对象方法看起来像这样。
MyClass.actsAsStatic()
有关更多信息,请参阅Kotlin文档。
object
适用于Singleton和companion object
静态方法。Kotlin-对象声明提供了很好的用法说明。