我一直在尝试:
class Foo(bar: Int)
对比:
class Foo(private val bar: Int)
尽管我找不到任何地方说明(bar: Int)
扩展为(private val bar: Int)
,但它们似乎表现相同,所以我的问题是,它们是否相同/相似?
另外,我一直在尝试在这些代码片段上使用-Xprint: typer
,它们生成相同的代码,除了第二个中多了一行。如何理解那一行?
..
class Foo extends scala.AnyRef {
<paramaccessor> private[this] val bar: Int = _;
def <init>(bar: Int): this.Foo = {
Foo.super.<init>();
()
}
}
..
..
class Foo extends scala.AnyRef {
<paramaccessor> private[this] val bar: Int = _;
<stable> <accessor> <paramaccessor> private def bar: Int = Foo.this.bar;
def <init>(bar: Int): this.Foo = {
Foo.super.<init>();
()
}
}
..
val
。 - drexincase
类和case
类中,var
可用且有意义地将构造函数参数渲染为(可变)类属性。 - Randall Schulzbar: Int
编译成了private[this] val bar: Int
。 - WelcomeToprivate val bar: Int
,否则就直接使用bar: Int
。 - Matt Roberts