2

你如何理解scala中的类参数。编译器是否会将隐式字段添加到类参数的类中。喜欢

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

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

4

1 回答 1

3

n并且d将成为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);
}
于 2012-08-28T01:14:34.907 回答