Kotlin 中有一种特殊的类,它本身也是一个实例(单例),这种既是类又是对象的类需要使用 object 关键字声明(普通类声明使用 class),它跟普通类一样,也可以实现接口和继承父类:
object MusicPlayer : Player(), OnStatusChangeListener {
var state: Int = 0
fun play(url: String) {
...
}
fun stop() {
...
}
override fun onMount(driver: Driver) {
}
override fun onUnmount(driver: Driver) {
}
}
这种 object 类的方法可以通过类名直接调用:
fun main() {
MusicPlayer.play("http://qqmusic.com/123213.mp3")
MusicPlayer.stop()
}
借助 Show Kotlin Bytecode 工具,将上述 Kotlin 代码反编译成 java 代码如下:
public final class MusicPlayer extends Player implements OnStatusChangeListener {
public static final MusicPlayer INSTANCE;
private MusicPlayer() {
}
static {
MusicPlayer var0 = new MusicPlayer();
INSTANCE = var0;
}
...
}
可以发现,Kotlin 中的 object 本质上就是 Java 中简单的单例模式(懒汉式),同时它的构造方法是 private 的,因此 object 类不能自定义构造方法!