object关键字定义的静态单例

19 阅读1分钟

静态单例

object 本身不能接受构造参数,因为它是一个静态单例

object Singleton {
    fun hello() = println("我是单例模式")
}

在 Kotlin 中,object 的底层实现实际上是通过静态字段和静态初始化块来实现的。编译后的字节码会生成一个静态的单例实例

等价的Java代码

public final class Singleton {
    public static final Singleton INSTANCE;

    private Singleton() {
        System.out.println("Singleton initialized");
    }

    public void hello() {
        System.out.println("我是单例模式");
    }

    static {
        INSTANCE = new Singleton();
    }
}

使用

这种写法虽然看上去像是静态方法的调用,但其实Kotlin在背后自动帮我们创建了一个Singleton类的实例,并且保证全局只会存在一个Singleton实例。

fun main() {
   Singleton.hello()
}

扩展

扩展
伴生对象