我有两个scala类(以及他们的Java代码,当我使用javap -private
来读取类文件时)。需要帮助来解释scala问题
当我在toString
方法中使用n
和d
时,它将在类中生成私有成员字段。这是为什么?我有点困惑。
Scala的#1:
class Rational(n: Int, d: Int) {
}
等效从javap的:
public class com.zjffdu.tutorial.scala.Rational
extends java.lang.Object
implements scala.ScalaObject{
public com.zjffdu.tutorial.scala.Rational(int, int);
}
Scala的#2:
class Rational(n: Int, d: Int) {
override def toString() = n + "/" + d
}
从javap的当量:
public class com.zjffdu.tutorial.scala.Rational
extends java.lang.Object
implements scala.ScalaObject{
private final int n;
private final int d;
public java.lang.String toString();
public com.zjffdu.tutorial.scala.Rational(int, int);
}
当val toString而不是'def toString'时会发生同样的事情吗? – soc 2011-06-04 14:07:30
如果它是'val toString',那么你会看到'toString'字段。 – 2011-06-04 14:15:43
是的,当然,但那么n和d的私人领域应该是正确的? – soc 2011-06-04 14:44:56