我剛剛讀了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();
而且我感慨這個感受。不應該將太多的方法調用鏈接到一個語句中。另一方面,編寫margarita.this()
和margarita.that()
也不太方便。
現在,我從德爾福世界來到Java。在Delphi中有with
語言結構。這受到少數人的喜愛並被許多人所厭惡(或者相反?)。我發現with
比鏈式調用的思想更優雅(我相信這是基於void
方法返回對其已被調用的對象的引用的工作原理 - 這是我不喜歡的部分,因爲void
應該返回nothing)。
我將不勝感激的with
語言特性被Java被收養,所以示例代碼可以寫像這樣:
Drink margarita = null;
with (new DrinkBuilder()) {
add("tequila");
add("orange liqueur");
add("lime juice");
withRocks();
withSalt();
margarita = drink();
}
我是唯一一個誰願意這樣解決鏈調用?其他人認爲with
可能是Java語言的有用擴展? (讓我想起某人關於需要「Java ++」的問題...)
這不僅限於Java 7,您可以通過簡單地在方法中返回「this」來編寫構建器。一個很好的例子是java.lang.StringBuilder。 – 2009-06-18 10:21:59
我認爲問題是Java 7允許鏈接而不返回它,因此改變了方法調用的語義。 – OregonGhost 2009-06-18 10:30:39