JDK1.5.1出來了,是不痛不癢的Debug版本。 感覺JDK1.5最重要的革命是Annotations,而其余的部分,如Generics和Concurrency和JVM Tools對於某些OpenSource或許是重要的武器,但對於我們這樣的星斗小民卻沒什麼感覺。再其余的的就是些小改動了。 又讀了一遍〈Java 1.5 Tiger: A Developer's Notebook〉,結合之前的應用,總結有用的新特性如下: 0.Annotations 最最重要的功能,相信是和AOP一道,打破傳統C/C++樊籬的語言革命武器。相比之下,動態語言只是簡化了代碼量,而沒有在編程架構上有所突破。 1.AutoBoxing 這是JDK1.5唯一讓小市民們有感覺的新特性,終於不用再Integer和int間顯式轉換了,但這本來就是天經地義的事情。 2.Generics 感覺像給所有容器類加了一個強類型的鎖,在Python這樣的動態語言大行其道的世界裡,強類型似乎不那麼吃香。 Generics好處就是Type Safe且循環的時候不用作類型轉換了。不好就是所有定義和聲明的地方都要加上類型定義,使得總代碼量反而增加了。如果用舊式循環語法,連Iterator都要聲明類型。 又或者,可以嘗試寫自己的泛型類,這對某些Open Source Util類或許有幫助,但自己的業務類,只會在OO無法解決之下,才會考慮使用。比如 public class Box { private List contents; }3. The for/in statement 代替了interator。但除了幾個基本類型,必須要用泛型聲明Collection。 4.枚舉 枚舉可以代替以前批量的 public static final a=1; public static final b=2; 更可以代替更不守規矩的直接使用String "A","B"和int 1,2 代替第2種情況的好處自不待言。statifc final a=1 因為還是不能限制程序員偷懶直接使用int,所以輸與enum。而且enum的代碼量更少,還可以做其他的擴展。 1.Base public enum Grade {A,B,C}; Grade.A.toString()="A"; Grade.valueOf("A") returns Grade.A; toString()方法可以重載,但需要同時重載valueOf()方法 2.通常,枚舉都是inline定義的,很少自己單獨占一個class文件 public class Downloader { public static enum DownloadStatus { INITIALIZING, IN_PROGRESS, COMPLETE }; } 3.遍歷 Grade[] gradeValues = Grade.values( ); for(Grade g : Grade.values( )) { out.pring(g); } 4.EnumMap()/EnumSet() antMessages.put(AntStatus.ERROR, "Error occurred."); 5.擴展 復雜還沒細看 5.靜態導入 簡化了工具類的使用,比如StrUtil.isEmpty()可以寫成isEmpty()了,而且可以只import指定的函數 另外還可以靜態導入Enum,比如Status.A可以寫成A了,但也引起了閱讀的模糊。 6.其他特性 更好的UniCode支持,和JDBC RowSet。 7.對我有用的特性到此為止 Threading, JVM Tools和Swing(但願ArogUML等有了新的Metal Ocean風格後會漂亮一些),Queue還有Network和Secuirty的小改進沒有用得上的場合, C style的Formater不想用,而可變參數其實在JDK1.4下可以傳入的時候就用一個List完成,而不是傳入的時候用String...,到了函數裡面才把String...轉回List 更為具體的JDK1.5更新,在 http://Java.sun.com/J2SE/1.5.0/docs/relnotes/features.Html J2SE 1.5 in a nutshell 中文版 http://dev.csdn.Net/develop/article/24/24440.shtm