ScalaとJavaの比較
Scalaで書いてコンパイルしたクラスをjavaにdecompileしたら面白かったのでメモ
まずはScala...
class test { def main = { Console println "Hello World" } }
でこいつをscalacでコンパイルしてからjavaに戻すと...
import java.rmi.RemoteException; import scala.Console$; import scala.ScalaObject; public class test implements ScalaObject { public test() { } public void main() { Console$.MODULE$.println("Hello World"); } public int $tag() throws RemoteException { return scala.ScalaObject.class.$tag(this); } }
なるほどなるほど~
ではこれは
object test {
def main = { Console println "Hello World" }
}
2つクラスができます。。
test$.class
import java.rmi.RemoteException; import scala.Console$; import scala.ScalaObject; public final class test$ implements ScalaObject { public test$() { } public void main() { Console$.MODULE$.println("Hello World"); } public int $tag() throws RemoteException { return scala.ScalaObject.class.$tag(this); } public static final test$ MODULE$ = this; static { new test$(); } }
test.class
import java.rmi.RemoteException; public final class test { public static final void main() { test$.MODULE$.main(); } public static final int $tag() throws RemoteException { return test$.MODULE$.$tag(); } }
objectにするとインスタンスがstaticに保持されるので1つしかできないみたいだ。