Kotlin中的object关键字

参考链接

《知乎-kotlin学习之路》
《Kotlin中文文档》

Kotlin中使用object关键字来代替Java中的匿名内部类实现。

在Java中很多时候我们需要一个一次性对象,可以使用匿名内部类来实现,如下:

1
2
3
4
5
6
7
Thread thread = new Thread(){

@Override
public void run(){
System.out.println("hello world");
}
}

在Kotlin中也支持同样的写法:

1
2
3
4
5
val thread: Thread = object : Thread(){
override fun run(){
println("hello world")
}
}

除此之外,object关键字后面可以跟多个基类。

1
2
3
4
5
6
7
8
9
10
11
open class A(x: Int){
public open val y: Int = x
}

interface B{

}

val ab: A = object : A(1), B{
override val y = 15
}

如果没有特殊的基类,只需要创建一个对象而已,则可以:

1
2
3
4
5
6
val adb = object : {
var x: Int = 0
var y: Int = 0
}

println(adb.x + adb.y)

除此之外,可以使用object关键字来实现一个单例模式。

object关键字类不具有构造方法,而且只有一个实例就是它本身。

1
2
3
4

object SingleInstance{

}

但是注意,上面是一个对象声明,而不是一个表达式,所以不能在赋值语句右边。

类内部的对象声明可以用 companion 关键字标记:

1
2
3
4
5
class MyClass{
companion object Factory{
fun create(): MyClass = MyClass()
}
}

该伴生对象的成员可通过只使用类名作为限定符来调用:

1
val instance = MyClass.create()