我正在阅读Java 7 预览演示文稿 (pdf),并且有一张关于Chained Invocation的幻灯片。这是幻灯片中使用的示例:
// 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();
我对此有复杂的感觉。不应该将太多的方法调用链接到一个语句中。另一方面,写作margarita.this()
也margarita.that()
不太方便。
现在,我从 Delphi 世界来到 Java。在 Delphi 中有with
语言结构。这是少数人所珍视的,而许多人则厌恶这一点(或者相反?)。我发现with
它比链式调用的想法更优雅(我相信它的工作原理是void
方法返回对已调用它的对象的引用——这是我不喜欢的部分,因为void
应该什么都不返回)。
我很欣赏with
Java 采用的语言特性,因此示例代码可以这样编写:
Drink margarita = null;
with (new DrinkBuilder()) {
add("tequila");
add("orange liqueur");
add("lime juice");
withRocks();
withSalt();
margarita = drink();
}
我是唯一一个更喜欢这种解决方案而不是链式调用的人吗?还有其他人觉得这with
可能是对 Java 语言的有用扩展吗?(让我想起有人关于需要“Java++”的问题......)