我刚刚在阅读一份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
应该返回nothing)。我希望 Java 采用
with
语言特性,这样示例代码可以像下面这样编写:Drink margarita = null;
with (new DrinkBuilder()) {
add("tequila");
add("orange liqueur");
add("lime juice");
withRocks();
withSalt();
margarita = drink();
}
我是不是唯一一个更喜欢这种解决方案而不是链式调用的人?还有其他人觉得with
可能是Java语言的一种有用扩展吗?(让我想起有人问过是否需要“Java ++”...)