如何理解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。这背后的机制是什么?
答案 0 :(得分:3)
n
和d
将成为private
字段,除非它们仅在构造函数中使用,在这种情况下,它们会被优化掉。 num
和den
也会是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);
}