我可以将参数传递给未存储在类本身的Scala类构造函数吗? 我希望实现Java中的功能,如下所示:
class A {
private final SomethingElse y;
public A(Something x) {
y = x.derive(this);
}
}
即。类构造函数接受参数,该参数稍后使用对this
的引用转换为另一个值。构造函数返回后,该参数被遗忘。
在Scala我可以做到:
class A(x: Something) {
val y = x.derive(this)
}
但这意味着x
存储在类中,我想避免。由于x.derive
方法使用对this
的引用,因此无法在随播对象中进行转换。
答案 0 :(得分:7)
但这意味着x存储在类中,我想避免使用。
如果除了构造函数本身之外没有引用构造函数参数,则不会创建字段。如果您引用x
,例如在toString()
中,Scala会自动为您创建和分配私人val
。
使用javap -c -private A
验证实际创建的字段类型。
BTW你在构造函数中传递this
,这意味着a.derive()
获得了对A
可能未初始化的实例的引用。小心!