2012-10-19 73 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實例內。小心!