Java 7プレビュープレゼンテーション(pdf)を読んでいて、 ChainedInvocationのスライドがありました。スライドで使用されている例は次のとおりです。
// 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()
はありません。
今、私はDelphiの世界から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 ++」の必要性についての誰かの質問を思い出させます...)