Use varargs judiciously varargs在我看這個item之前,我用的習以為常: public String appendStrings ( String ... strs ) { StringBuilder sb = new StringBuilder ( ) ; for ( String str : strs ) { sb. append ( str ) ; } return sb. toString ( ) ; } 後來某天和同事討論到strs輸入檢查的問題時,就回來翻閱了這個item。假如你要限制client必須輸入一個或多個參數時,在method內做限制檢查並不是一個好的設計;書中建議做法可以如下: public static String appendStrings ( String first, String ... strs ) { StringBuilder sb = new StringBuilder ( first ) ; for ( String str : strs ) { sb. append ( str ) ; } return sb. toString ( ) ; } 透過限制必須傳入一個參數的方式,可以降低有人傳空資料的機會。除此之外,書中提到使用這種方式可能會導致效能問題,因為每次的呼叫JVM都會針對內容做array的allocation與initialization。從網路上別人做實驗的文章中發現,速度大概慢了60倍。 針對client的呼叫有95%的機會少於三個參數的人,書中給了以下workaround: public void foo ( ) { } public void foo ( int a1 ) { } public void foo ( int a1, int a2 ) { } public void foo ( int a1, int a2, int a3 ) { } public void foo ( int a1, int a2, int a3, int ... rest ) { } 還特別舉了JDK中的EnumSe...