
上QQ阅读APP看书,第一时间看更新
2.3 Kotlin的类(二)
2.3.1 对象声明和对象表达式
对象声明、对象表达式和伴生对象都用到了object关键字。
1.对象声明(Object Declarations)
对象声明是指在object关键字之后指定对象名称。
Kotlin通过对象声明可以实现单例模式,这是Kotlin在语法层面上的支持。使用对象声明创建单例类:
object 单例名[: 继承父类、实现接口] { 成员属性 成员函数 }
例如:

将上述代码生成的class文件进行反编译,可以看到使用对象声明跟使用饿汉模式生成的单例是类似的,如图2-6所示。

图2-6 对象声明反编译后
所以在Java中调用Singleton1的printlnHelloWorld()方法应该是这样的:

虽然类似于饿汉模式,但是是延迟初始化的。因为只有在第一次用到printlnHelloWorld()方法时,Singleton1才会初始化。
2.对象表达式(Object Expressions)
对象表达式类似于Java的匿名内部类:

与Java的匿名内部类相比,它有以下特性:
· 支持实现多个接口。
· 能够访问非final修饰的变量。