`
RednaxelaFX
  • 浏览: 3022932 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

Scala的object语法里的代码生成到哪里了?

阅读更多
刚收到一个问题,
引用
之前一直认为scala的object 中执行语句相当于在java的static构造块中,今天看到:
http://stackoverflow.com/questions/2347107/what-is-scala-equivalent-of-javas-static-block
请帮忙分析一下,放在scala object 中的执行语句,最终转换为java时是如何的?
比如
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。
分享到:
评论
1 楼 524133723 2016-01-18  
Hi,最近遇到一个scala棘手的问题,代码如下:
public class TestClassLoader {
	
	public void say(Object request) {
		Seq  sendMsgs = (Seq)request;
		Collection<KeyedMessage> sendMsgList = JavaConversions.asJavaCollection(sendMsgs);
	}

	public static void main(String[] args) {
		new TestClassLoader();

	}

}


本地java:1.7.0_71

发现class loader会去加载scala的类,但是去掉“Seq  sendMsgs = (Seq)request;”,便不会加载。

求教下是什么问题所导致的

相关推荐

Global site tag (gtag.js) - Google Analytics