最近、このタイプの構文を利用するコード (Amazon Hadoop コード) を見たことがあります。
Foo bar = new Foo().setX(10).setY(11);
甘いなと思ったのでやってみることにしました。代わりに私のsetX()
型関数を返して、それらすべてを入れました。これはうまくいきました。継承で試してみると、いくつかの奇妙な結果が得られました。Foo
void
return this;
具体例を挙げましょうLocation
。x と y の 2 つのフィールドを持つ 2 つのクラスがあります。そして、3 番目のフィールド zLocation3D
を継承して追加する別のクラス。Location
すべてのフィールドは、セッターに対して上記のメソッドを使用します。
今、新しい location3D インスタンスを作成し、そのフィールドを設定したいのですが、何が起こるかです
new Location3D().setZ(7).setY(6).setX(5)
動作中
new Location3D().setX(7).setY(6).setZ(5)
しません。
by が機能しないということは、 from から返されるsetY(6)
のはLocation
オブジェクトではなくlocation3D
オブジェクトであるため、メソッドがないというsetZ()
ことです!
この長いイントロの後、私の質問は次のとおりです。呼び出し元にオブジェクトのキャストを強制することなく、この形式の「セッター文字列」を継承で機能させることはできますか? もしそうならどのように?
また、これには「セッターストリング」よりも優れた用語があると思いますが、それは何ですか?