我正在尝试理解Scala中对象私有变量的实现。 Scala编译这个类
class Counter{
private[this] var age = 0
}
进入以下java字节码:
public class Counter implements scala.ScalaObject {
private int age;
public Counter();
}
但是,由于JVM不支持对象私有字段,因此我们拥有古老的私有字段,可以从该类的其他实例访问。所以对我来说,隐藏私有字段的前一课和下一课之间的区别并不清楚。
class Counter2{
private var age = 0
}
public class Counter2 implements scala.ScalaObject {
private int age;
private int age();
private void age_$eq(int);
public Counter2();
}
答案 0 :(得分:1)
JVM无关紧要。 Scala的语义由Scala编译器实现,而不是JVM。毕竟,JVM甚至不是Scala运行的唯一平台,在CLI上有Scala的生产就绪实现,以及ECMAScript和本地实现的实验。