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がクラスに格納されていることを意味します。これは避けたいと思います。

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

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

ところでthis、コンストラクター内を渡すa.derive()と、初期化されていない可能性のある。のインスタンスへの参照を取得しますA。気をつけて!

于 2012-10-19T11:53:47.987 に答える