Scala类构造函数的局部参数

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的引用,所以我不能在伴生对象中进行转换。

1个回答

7
但这意味着x被存储在类中,而我想避免这种情况。如果除了构造函数本身之外没有任何地方引用构造函数参数,那么将不会创建字段。如果在toString()中引用了x,则Scala会自动为您创建和分配私有的val。使用javap -c -private A验证实际创建了哪些字段。顺便说一句,在构造函数中传递this,这意味着a.derive()得到对可能未初始化的A实例的引用。要小心!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接