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


是静态类还是单例类?

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

scala

OTAKU牧 12 years, 5 months ago

就拿楼主的例子说明:
用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是静态类,不保证单例。

NRCLM answered 12 years, 5 months ago

Your Answer