下面是一个用"Object"关键字装饰的A类:
object A {
}
反编译成Java代码后发现,它是通过静态代码块进行初始化的:
public final class A {
public static final A INSTANCE;
private A() {
}
static {
A var0 = new A();
INSTANCE = var0;
}
}
我很好奇为什么Kotlin不使用静态内部类来实现Singleton,就像这样:
public final class A {
public A getInstance() {
return LazyHolder.INSTANCE;
}
private A() {
}
private static class LazyHolder {
private static final A INSTANCE = new A();
}
}
然后,在类A中使用变量"b"时,在A和getB()之间添加"getInstance()"方法:
public static final void main() {
A.getInstance().getB();
}
这种单例模式支持延迟加载,可以避免内存浪费.为什么Kotlin不使用这种方法来实现"Object"关键字呢?