刚收到一个问题,
[quote]之前一直认为scala的object 中执行语句相当于在java的static构造块中,今天看到:
[url]http://stackoverflow.com/questions/2347107/what-is-scala-equivalent-of-javas-static-block[/url]
请帮忙分析一下,放在scala object 中的执行语句,最终转换为java时是如何的?
比如
里面的 println("hello") 在java中是怎么表达的呢? [/quote]
有这么具体的代码例子的话,最简单的回答办法就是把Scala代码编译到Class文件然后再拿Java的反编译工具来打开 :lol:
我测试用的代码:
生成了两个类,X与X$。下面分别是它们反编译出来的样子:
所以结果要说是在Java的static块里也不算很错… :arrow:
哦对了我这里用的是Scala 2.8 RC1。一直懒还没把工作机更新到2.8 final。
[quote]之前一直认为scala的object 中执行语句相当于在java的static构造块中,今天看到:
[url]http://stackoverflow.com/questions/2347107/what-is-scala-equivalent-of-javas-static-block[/url]
请帮忙分析一下,放在scala object 中的执行语句,最终转换为java时是如何的?
比如
object A {
println("hello")
}
里面的 println("hello") 在java中是怎么表达的呢? [/quote]
有这么具体的代码例子的话,最简单的回答办法就是把Scala代码编译到Class文件然后再拿Java的反编译工具来打开 :lol:
我测试用的代码:
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块里也不算很错… :arrow:
哦对了我这里用的是Scala 2.8 RC1。一直懒还没把工作机更新到2.8 final。