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
闽公网安备 35060202000074号