嗨!
该代码不仅难以阅读,而且还未能遵守DRY(Don't repeat yourself)准则。如果我需要在列表<Account> Collection<Account>中更改此映射的值类型,将会发生什么事?我需要替换代码中的所有的此类声明。尽管IDE重构对此有所帮助,仍然需要对相当多的代码进行修改,此类修改甚至有可能对代码的语义产生一定影响。
事实上,创建新对象时没有什么好办法可以避免该语法,但是我要说的是,如果将typedef和Generic一起引入,情况会好的多。
我最初是这种观点。
但是,随着认识的加深,我发现使用typedef解决问题是一个错误的解决方案,因为靠简单添加的方式对使用单独类定义复杂Generic类型没有任何作用。
class AccountMap extends HashMap<String, List&lAccount>> { ...}
除去扩展实现(很显然是HashMap而不是Map)这种情况,该解决方案可能比引入typedef好一些,因为typedef有其自身的缺陷。
迄今我还没有遇到这种麻烦,但我的建议是:如果编写该类型三次(初始化两次,在代码中使用一次以上)以上,则使用它。
除此缺点外,总体来说我还是相当喜欢Generics的,而且尤其喜欢阅读编写的非常好的TestNG Javadocs。
结束语
对于JDK 5.0的新特性我非常满意。我有幸参与了JSR 175和JSR 201,从而有机会对开发JDK 5.0的新特性作出了自己的贡献。同所有根本性的变革一样,不是所有的新特性都受到大家的欢迎,但随着大多数开发人员发现其中某些特性非常有用,并且还保留了向后兼容性,我认为JDK 5.0向开发更多健壮的Java代码迈出了坚定的一步。
关于作者
Cedric Beust的电子邮箱:cedric@beust.com
博客:http://www.beust.com/weblog/
Cedric Beust是WebLogic Server团队的高级软件开发人员,他在其博客Otaku中提出了J2EE、Java、AOP和软件开发等方面的见解。
原文出处
http://www.theserverside.com/blogs/showblog.tss?id=JDK5Practice






