如何理解scala中的类参数

时间:2012-08-28 00:43:20

标签: scala

如何理解scala中的类参数。编译器是否会为类参数添加隐式字段。 像

    class Rational(n:Int, d:Int){
        val num = n
        val den = d
        override def toString = n + "/" + d
    }

我们在Rational类(n,d,num,den)中有4个字段吗?如果没有,我们如何在方法toString中访问n和d。这背后的机制是什么?

1 个答案:

答案 0 :(得分:3)

nd将成为private字段,除非它们仅在构造函数中使用,在这种情况下,它们会被优化掉。 numden也会是private个字段,但它们也会获得public个访问者。

试试这个:

class Test(a: String) {
  println(a)
}

然后编译并运行javap -private Test,它显示了该类的所有类和成员:

public class Test extends java.lang.Object{
    public Test(java.lang.String);
}

然后尝试使用该参数的方法:

class Test(a: String) {
  println(a)
  def printa { println(a) }
}

public class Test extends java.lang.Object{
    private final java.lang.String a;        // <- private field
    public void printa();
    public Test(java.lang.String);
}