Kotlin中的object关键字

参考链接

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

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

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

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

val thread: Thread = object : Thread(){
    override fun run(){
        println("hello world")
    }
}

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

open class A(x: Int){
    public open val y: Int = x
}

interface B{

}

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

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

val adb = object : {
    var x: Int = 0
    var y: Int = 0
}

println(adb.x + adb.y)

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

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


object SingleInstance{

}

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

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

class MyClass{
    companion object Factory{
        fun create(): MyClass = MyClass()
    }
}

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

val instance = MyClass.create()