你如何理解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。这背后的机制是什么?
你如何理解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。这背后的机制是什么?
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);
}