2012-10-19 2 views
6

は、私はクラス自体に格納されていないScalaのクラスのコンストラクタに引数を渡すことはできますか?次のように 私は、Javaで書かれていても大丈夫な機能を実現したい:Scalaのクラスのコンストラクタローカルパラメータ

class A { 
    private final SomethingElse y; 
    public A(Something x) { 
      y = x.derive(this); 
    } 
} 

すなわち、クラスコンストラクタは、後でthisへの参照を使用して別の値に変換されるパラメータを受け取ります。パラメータはコンストラクタが返った後に忘れ去られます。

class A(x: Something) { 
    val y = x.derive(this) 
} 

をしかし、それはxは私が避けたいクラスに格納されていることを意味します

スカラ座では私が行うことができます。 x.deriveメソッドはthisへの参照を使用しているため、コンパニオンオブジェクトでは変換できません。

答えて

7

しかし、私は避けたいクラスにxが格納されていることを意味します。

コンストラクタ自体を除いてコンストラクタ引数を参照しない場合、フィールドは作成されません。 xを参照するとtoString()では、Scalaは自動的にプライベートvalを作成して割り当てます。

使用javap -c -private Aは実際に作成されているフィールドの種類を確認します。

ところで、は、おそらく初期化されていないAのインスタンスへの参照を取得するコンストラクタ内にthisを渡します。注意してください!

関連する問題