6

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

4

1 回答 1

7

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

如果您在构造函数本身之外的任何地方都没有引用构造函数参数,则不会创建字段。如果您在 中引用xeg toString(),Scala 会自动val为您创建和分配私有的。

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

顺便说一句,您this在构造函数内部传递,这意味着a.derive()获取对可能未初始化的A. 当心!

于 2012-10-19T11:53:47.987 回答