我有一个像这样的简单课程。
我没有指定参数是val还是var。
什么类型的参数是name
和price
?
class Car(name:String, price:Float){
}
答案 0 :(得分:2)
原则上接受的答案是正确的。但实际上,如果传递的参数用于def
的实现,它将成为一个实例字段,就像使用private val
声明一样(除了没有private def
将为它生成getter)。
例如:
class Foo(bar: Bar) {
def foo: Bar = bar
}
可以反编译成以下java转换(使用javap
)
public class Foo {
private final Bar bar;
public Bar foo();
public Foo(Bar);
}
有关详细信息,另请参阅my answer on this thread。
答案 1 :(得分:0)
如果将类参数声明为var
或val
,它将成为实例变量。如果您没有指定,则不会。因此,它不等同于val
或var
。
就是否可以重新分配而言,类参数就像普通参数一样,不能重新分配。
答案 2 :(得分:0)
通过@ sepp2k添加答案:如果您使用case class
,则默认值为val
:
case class Foo(bar: Bat)
在这种情况下,bar
是val
,public
可访问性。