2012-10-19 43 views
6

我可以传递参数给斯卡拉类的构造函数没有被存储到类本身? 我要实现它在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,我不能让伴侣对象的转变。

回答

7

但它意味着x被存储在类,这是我想避免的。

如果您不在构造函数本身的任何地方引用构造函数参数,则不会创建该字段。如果您参考x例如在toString(),斯卡拉会自动为你创建和分配私人val

使用javap -c -private A验证什么样的领域的实际创建。

BTW你传递this构造,这意味着得到一个参考可能未初始化的A实例内。小心!