scala-scala的object是怎么实现的(jvm)

scala-scala的object是怎么实现的(jvm)

想挽留 发布于 2017-04-11 字数 129 浏览 1211 回复 1

是静态类还是单例类?

object AAA{
def foo(){println("foo")}
}

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晚风撩人 2017-05-03 1 楼

就拿楼主的例子说明:
用scalac编译成功后,会生成两个class文件,AAA.class和AAA$.class。
使用javap工具可查看结构。

$ javap -p AAA.class
Compiled from "AAA.scala"
public final class AAA {
public static final void foo(); //此处调用AAA$.MODULE$.foo()
}
$ javap -p AAA$.class
Compiled from "AAA.scala"
public final class AAA$ implements scala.ScalaObject {
public static final AAA$ MODULE$;
public static {}; //静态初始化 MODULE$
public void foo(); //这里是foo的真实实现
private AAA$(); //禁止外部初始化。
}

由此可知,AAA是静态类,不保证单例。