`
RednaxelaFX
  • 浏览: 3049024 次
  • 性别: 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;”,便不会加载。

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

相关推荐

    scala学习-project.zip

    1. **基础语法**:Scala的语法与Java有些相似,但更简洁。它使用缩进来表示代码块,而不是大括号 `{}`。例如,函数定义可以写成`def functionName(args): returnType = body`。 2. **类型系统**:Scala具有静态类型...

    基于maven的scala与java相互调用的简单实例

    Scala是一种强大的静态类型编程语言,它在语法上兼容Java,并且提供了函数式编程和面向对象编程的特性。通过Maven,我们可以轻松地在Java项目中引入Scala代码,反之亦然。 首先,要实现Java和Scala的互调用,我们...

    scala编程入门教材

    1. **基本语法与数据类型**:Scala的基础包括变量声明、常量、基本数据类型(如Int, Double, Boolean等)、字符串以及模式匹配。变量在Scala中是不可变的,通过`val`关键字定义,而可变变量使用`var`。 2. **对象和...

    scala-2.11.8源码

    例如,`Any`, `AnyVal`, `AnyRef` 是Scala的基础类型,它们与Java的`Object`有类似但更精细的划分。源码中可以查看这些类型的实现,理解它们如何在运行时进行类型检查和转换。 2. **类和对象**:Scala的类和对象...

    Scala入门学习教程.docx

    Scala 语言使用 scalac 编译器来编译 Scala 代码,生成标准的 Java 类文件。编译后的类文件可以使用 scala 命令来执行。 Scala 语言的执行过程与 Java 语言非常相似,可以使用类似的命令和选项来执行程序。 知识点...

    scala教材.docx

    在 Scala 教程中,我们首先会接触到基础概念,包括表达式、值、函数、类、继承、特质、类型、apply 方法、单例对象、函数即对象、包、模式匹配、样本类以及异常处理机制 try-catch-finally。 1. **表达式**:Scala ...

    Scala API 2.9

    9. ** Scaladoc**:`scala-docs-2.9.2` 文件包含了完整的 Scaladoc,这是 Scala 的文档生成工具,用于自动生成带有语法高亮和注释的 API 文档,方便开发者查阅和学习。 通过阅读 Scala API 2.9.2 的文档,开发者...

    scala编程基础

    当定义为样例类时,Scala会自动生成一系列有用的方法,如`equals`、`hashCode`等。 - **Option类型**:用于表示可能为空的值,是Scala处理空值的一种方式。 - **偏函数**:用于处理部分输入的情况,常用于错误处理或...

    面向Java开发者的Scala教程

    Scala 是一种多范式编程语言,它融合了面向对象和函数式编程的特点,设计目标是提供一种更简洁、更高级的编程语法,同时保持高性能。对于熟悉Java的开发者来说,Scala提供了一种新的视角和工具来解决编程问题。 本...

    scala tutorial pdf

    与Java相比,Scala具有更丰富的语法结构和更高的代码密度,同时避免了Java中的一些复杂性和冗余。 2. 第一个示例:Hello, World! 典型的“Hello, World!”程序在Scala中的实现如下: ```scala object HelloWorld {...

    scala-intellij-bin-2021.3.18.zip

    9. **代码模板**:预设的代码模板可以帮助开发者快速生成常见的Scala代码结构,如case class、object、trait等。 10. **文档查看**:插件可以链接到Scaladoc或其他在线文档资源,帮助开发者查看库函数的详细说明。 ...

    Scala语言规范_操作手册_使用手册_2.7版本.zip

    13. **模块化和打包**:Scala支持模块化,可以通过Scala的package和object来组织代码,便于管理和复用。 14. **命令行工具和编译器**:介绍如何使用Scala的编译器scalac以及相关的命令行选项。 阅读《Scala语言...

    lunatech-scala-2-to-scala3课程:Lunatech课程-“从Scala 2前进到Scala 3”

    3. **元编程重构**:Scala 3的元编程API进行了重构,使用`quasiquotes`来表示和操作AST(抽象语法树),使得代码生成和编译时计算更加直观。 4. **互操作性改进**:Scala 3加强了与Java和其他JVM语言的互操作性,...

    scala教程.zip

    Scala编译器会生成高效的JVM字节码,同时,Scala社区也提供了许多性能优化工具和库,如Breeze(数值计算库)。 以上就是Scala的基础知识和关键特性。通过深入学习和实践,你将能掌握Scala的精髓,并利用它开发高效...

    scala-course-master.rar

    9. **元编程**:Scala允许在运行时生成和操作代码,这得益于它的反射和动态类型的能力。它可以用来创建更灵活和强大的API。 10. **未来和承诺(Future and Promise)**:在处理异步编程时,Scala提供了Future和...

    Scala简单说明

    例如,在类中定义一个私有字段`private var _name: String = _`,Scala会自动生成`name`方法作为getter,`name_=`方法作为setter。 #### 主构造器 在Scala中,类的第一个构造器被称为主构造器,它会在类定义中显式...

    scala语言的学习记录

    作为一门在Java虚拟机(JVM)上运行的语言,Scala提供了更高的抽象层次,使得代码更加简洁和高效。 1. 面向对象与函数式编程的结合: Scala是完全面向对象的语言,所有数据都是对象,同时也支持函数式编程。它引入...

    Spark学习笔记

    这段代码通过一个高级`for`循环生成了一系列数字组合。 **2.6 求偶数** 为了求解偶数,可以利用Scala的`for`循环特性,结合条件过滤来实现。例如: ```scala val evenNumbers = for (i ) yield i println(even...

Global site tag (gtag.js) - Google Analytics