Scala的object语法里的代码生成到哪里了?
刚收到一个问题,
object A { println("hello")}
里面的 println("hello") 在java中是怎么表达的呢?
有这么具体的代码例子的话,最简单的回答办法就是把Scala代码编译到Class文件然后再拿Java的反编译工具来打开
我测试用的代码:
object X { println("hello")}生成了两个类,X与X$。下面分别是它们反编译出来的样子:
import scala.reflect.ScalaSignature;@ScalaSignature(bytes="\006\001m9Q!\001\002\t\006\025\t\021\001\027\006\002\007\0059A(Z7qift4\001\001\t\003\r\035i\021A\001\004\t\021\t!\t\021!E\003\023\t\t\001lE\002\b\025I\001\"a\003\t\016\0031Q!!\004\b\002\t1\fgn\032\006\002\037\005!!.\031<b\023\t\tBB\001\004PE*,7\r\036\t\003'Yi\021\001\006\006\002+\005)1oY1mC&\021q\003\006\002\f'\016\fG.Y(cU\026\034G\017C\003\032\017\021\005!$\001\004=S:LGO\020\013\002\013\001")public final class X {}import scala.Predef$;import scala.ScalaObject;public final class X$ implements ScalaObject { public static final X$ MODULE$; static { new X$(); } private X$() { MODULE$ = this; Predef$.MODULE$.println("hello"); }}所以结果要说是在Java的static块里也不算很错…
哦对了我这里用的是Scala 2.8 RC1。一直懒还没把工作机更新到2.8 final。