Scala类构造函数的本地参数

时间:2012-10-19 11:50:52

标签: scala

我可以将参数传递给未存储在类本身的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的引用,因此无法在随播对象中进行转换。

1 个答案:

答案 0 :(得分:7)

  

但这意味着x存储在类中,我想避免使用。

如果除了构造函数本身之外没有引用构造函数参数,则不会创建字段。如果您引用x,例如在toString()中,Scala会自动为您创建和分配私人val

使用javap -c -private A验证实际创建的字段类型。

BTW你在构造函数中传递this,这意味着a.derive()获得了对A可能未初始化的实例的引用。小心!