?
管中窺虎
在學習
java 1.5
的過程中,我使用了
sun
公布的
tutorial
,這份文檔寫的比較詳盡易明,但是對于想快速了解
tiger
而且具有較好
java
基礎的人來說,大篇幅的英文文檔是比較耗時間和非必需的,所以我將會歸納這份文檔的主要內容,在保證理解的底線上,盡力減少閱讀者需要的時間。
在以下地址可以進入各新增語言特色介紹以及下載相關文檔(若有)。
http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html
Varargs
(理解為 var-args 可變參數)
在以前的版本里,一個接納多個參數的方法,在調用前就需要用創建一個數組來放入這些參數,例如:
???? new ?Integer( 7 ),
???? new ?Date(),
???? " a?disturbance?in?the?Force "
};
?
String?result? = ?MessageFormat.format(
???? " At?{1,time}?on?{1,date},?there?was?{2}?on?planet? "
????? + ? " {0,number,integer}. " ,?arguments);
現在依然必須這么傳遞,但varargs自動化并隱藏了這些步驟,而且還與已有的API兼容。之前的那個例子里,MessageFormat.format現在有了這樣的聲明:
????????????????????????????????Object

在最后一個參數的類型后面的那三個句號,說明了這個參數可以傳入一個數組或者一串參數。注意只能是最后那個參數才能有這種用法。現在這個方法可以這樣引用:








?
Autoboxing
和varargs有著很強的配合關系,看看下面這些代碼:
















































這個小程序可能是最小型的完整的測試框架了。getMethod和printf方法由于varargs的緣故而不需要聲明數組來傳參了。代碼比以前會清潔很多。
什么時候該用?作為客戶端的話大可以好好利用,只要api里有提供,事實上java的核心api里的反射,信息格式化,和新的printf都用了varargs。而作為api的設計者,則應該謹慎地使用,只有你感覺到很有效果的時候才采取。總的來說,不要重載帶varargs的方法,否則客戶端程序員會很困惑哪個方法是被調用了。