私はちょうどJava 7 preview presentation (pdf)を読んでいたし、連鎖呼び出しにスライドがあった。スライドに使用されている例は次のとおりです。Java 7の連鎖呼び出しですか?
// Construction with setters
DrinkBuilder margarita = new DrinkBuilder();
margarita.add("tequila");
margarita.add("orange liqueur");
margarita.add("lime juice");
margarita.withRocks();
margarita.withSalt();
Drink drink = margarita.drink();
// Construction with chained invocation
Drink margarita = new DrinkBuilder()
.add("tequila")
.add("orange liqueur")
.add("lime juice")
.withRocks()
.withSalt()
.drink();
そして、私はこれについて気をつけています。 1つのステートメントにメソッド呼び出しをあまりにも多く連鎖してはいけません。一方、margarita.this()
とmargarita.that()
を書くこともそれほど便利ではありません。
今、私はデルファイの世界からJavaに来ています。また、Delphiにはwith
言語構成があります。これはいくつかのことを大切にしており、多くの人に嫌われています(あるいは、それは逆ですか?)。私はwith
が呼び出されたオブジェクトへの参照を返すvoid
メソッドに基づいて動作すると信じています - これはvoid
が返すべきであると私が気に入らない部分ですなし)。
私は、Javaで採用されてwith
言語機能をいただければ幸いですので、コード例がそうのように書くことができます。
Drink margarita = null;
with (new DrinkBuilder()) {
add("tequila");
add("orange liqueur");
add("lime juice");
withRocks();
withSalt();
margarita = drink();
}
は、私は、連鎖呼び出しにこのソリューションを好むだろう唯一のでしょうか?誰もがwith
がJava言語の便利な拡張機能になると感じていますか? (「Java ++」の必要性に関する誰かの質問を思い出させます...)
これはJava 7に限定されず、単にメソッドの "this"を返すことでBuilderを作成できます。良い例はjava.lang.StringBuilderです。 –
私は、Java 7はこれを返さずに連鎖を許可しているため、メソッド呼び出しのセマンティクスを変更することが重要だと思います。 – OregonGhost