objects

Consider the following Scala object

object HelloObj {
  val f = "one field";
  val x = 3;
}

It gets compiled to two files, HelloObj.class and HelloObj$.class. The first of these only exists to make life easier for Java programmers.

public final class HelloObj extends java.lang.Object{
    public static final int $tag();
    public static final int x();
    public static final java.lang.String f();
}
public final class HelloObj$ extends java.lang.Object implements scala.ScalaObject{
    public static final HelloObj$ MODULE$;
    public static {};
    public HelloObj$();
    public int x();
    public java.lang.String f();
    public int $tag();
}

Writing “HelloObj.x()” in Scala is the same as writing “HelloObj$.MODULE$.x()”, but the former should probably be preferred for readability.

classes

Now the following two Scala classes ...

class Foo {
  val x = "somefield"
  final val xx = "finalField"
  var z = 3;
  final var zz = 3;
}
 
class Bar extends Foo {
  override val x = "someOverridenValue"
}

get compiled to the following Java classes

public class Foo extends java.lang.Object implements scala.ScalaObject{
    public Foo();
    public final void zz_$eq(int);
    public final int zz();
    public void z_$eq(int);
    public int z();
    public final java.lang.String xx();
    public java.lang.String x();
    public int $tag();
}
public class Bar extends Foo implements scala.ScalaObject{
    public Bar();
    public java.lang.String x();
}
 
faqs/scala-to-java-mapping.txt · Last modified: 2006/04/24 14:46 by buraq
 
Recent changes RSS feed Valid XHTML 1.0 Driven by DokuWiki