CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

在TSS.com上看到一篇JDK5.0的整理文章,不敢藏私,今天周末有空,翻译好给大家共享。如翻译不好请多多包涵。

楼主sean_gao(大胃 http://gaoyuxiang.cn/)2004-12-04 14:16:03 在 Java / J2SE / 基础类 提问

原文见:http://www.theserverside.com/blogs/showblog.tss?id=JDK5Practice  
  (如需转载请注明出处、原作者和译者,谢谢)  
   
  JDK   5实践   -   By   Cedric   Beust  
  2004年11月5日  
   
  我编写JDK   5.0代码至今已有超过6个月的时间了,我想我可以花点时间整理一下我的经验,对新引入的语言功能做一些总结。  
   
  增强的for循环  
   
  这个新功能是毫无争议的冠军。我甚至不知道如何来描述在所有地方(几乎所有地方)使用新的for循环是多么惬意的一件事。我从心理上已经开始抵触那些我必须使用老的for循环的情形,如当我需要索引或者希望迭代器在循环外可见的时候。  
   
  新的代码更加可读且不像以往那样充斥着杂音(比如你不需要的索引或者是将下面具体的实现暴露出来的递增)。顺便提一下,后面这一点是新的循环带来的意外优点。假设你有如下代码:  
   
  String[]   names   =   ...;  
  for   (String   name   :   names)   {  
      //   ...  
  }  
   
  然后你决定要将names的类型改为Collection。你如何修改你的代码呢?  
   
  List<String>   names   =   ...;  
  for   (String   name   :   names)   {  
      //   ...  
  }  
   
  对,就是这样,只需要修改一行。没有比这个更好的了。  
   
  注解(Annotations)  
   
  很显然,我偏爱注解因为它们是TestNG(译者注:TestNG是该文原作者的一个开源测试框架,基于Java注解)的核心,不过我坚信注解会改变我们使用Java编写软件的方式。我们已经有太长的一段时间依赖于在我们的程序中通过反射引入元数据了,注解机制终于可以提供一种优秀的方法解决这个问题。  
   
  同时,由于目前还没有需要用到某些预定义的注解如@Override,我对它们还没有什么更多的见解。  
   
  在我看来,未来几年时间内,我们阅读和编写的大部分Java代码都会包含注解,这是不可避免的。  
   
  //   未完,剩余部分见回复或我的blog:   http://sean.blogspirit.com  
  问题点数:0、回复次数:10Top

1 楼sean_gao(大胃 http://gaoyuxiang.cn/)回复于 2004-12-04 14:17:15 得分 0

静态引用  
   
  除了在我的注解类Retention和Target中,我很少使用它们。我仍然不是很确信最初增加这个功能的想法(不鼓励通过实现一个接口来重用它的常量而不需要限制和验证它们的这种“反模式”)足够正确以至于需要引入一个新的语言功能,不过时间会给我们答案。  
   
  我想从某种意义上讲,在我每天的编程中使用IDE已经让引用变得完全过时,于是不管怎么说我大概也不会真正对这个新功能有什么强烈的感受。  
   
  变量长度参数  
   
  到目前为止我还没有感到需要这个功能。它可能时而会用起来比较方便,但是我真的不确信它需要给语言带来变化。  
   
  枚举  
   
  虽然我一定会对枚举给予理论上的首肯,我还没有真正的把我的代码转换成使用它们,并且我暂时也没有使用它们的想法。我相信当我使用它们时,结果会让我满意并且会使我的代码更加健壮一点。  
   
  泛型  
   
  我把最好的留到了最后…   不过因为这个条目会比较长,我会把泛型的讨论留到明天。  
   
   
  自动装箱  
   
  目前我还没有太多的使用自动装箱,也许因为我隐约有一种失去对我的代码性能控制的感觉。不过我想这个并没有什么实际的道理,自动装箱有时会用起来很方便也使得你的代码更加可读一点。我想我会鼓励开发者在代码中自动装箱的地方作出标记,我相当确信IDE会跟着提供这样的功能。  
   
  Top

2 楼sean_gao(大胃 http://gaoyuxiang.cn/)回复于 2004-12-04 14:17:31 得分 0

泛型  
   
  从哪里说起呢?  
   
  首先一点,没有人会反对说泛型是一个可以增强代码健壮性的可靠的概念。至于为什么它们在不考虑语言因素的前提下通常会那么有争议是因为它们的具体实现。以我在C++委员会多年任职的经历,我可以担保要将它们做好做对是多么困难的一件事。  
   
  简单的说,我这样形容Java泛型:我的代码变得更加健壮,但是也更加难懂。  
   
  那么什么是问题所在呢?  
   
  不必要的重复。  
   
  首先,我自始至终都不喜欢由一般的转型需要带来的不必要的重复。例如,与其写:  
   
  Map   accounts   =   new   HashMap();     //   no   generics  
  ...  
  Account   a   =   (Account)   accounts.get("Cedric");  
   
  为什么我不能简单的写:  
   
  Map   m   =   new   HashMap();     //   no   generics  
  ...  
  Account   a   =   m.get("Cedric");  
   
  然后让编译器引入一个隐式的转型呢?因为很显然我想从Map中取出的是一个Account类的对象。显然,泛型并不能完全解决这个问题,不过也相当好的减轻了一些。然而它们也在其他地方使事情变得更糟:  
   
  Map<String,   List<Account>>   accounts   =   new   HashMap<String,   List<Account>>();  
   
  唉。  
   
  这样的代码不仅更难读,而且违背了DRY原则(“不要重复自己”)。如果我需要将这个map的值类型从List<Account>改成Collection<Account>怎么办?我需要替换掉我的代码中所有的这样的语句。虽然IDE的重构会有些帮助,但是这仍然是一大堆语义上没有影响的类似修改的代码。  
   
  我承认当你创建一个新的对象时并没有什么好的方法可以避免这个语法,不过我想表明的是我认为如果typedef也同时被引入的话,泛型也许会做得更好。  
   
  至少我一开始是这么想的。  
   
  当我进一步考虑这个问题以后,我意识到typedef并不是解决这个问题的正确方法,因为简单讲,它们顶多只能使用一个单独的类来定义你的复杂泛型类型,除此以外,它们不能做更多的事。  
   
  class   AccountMap   extends   HashMap<String,   List&lAccount>>   {  
    ...  
  }  
   
  除非你需要继承一个实现类(HashMap而不是Map,显然),这一方案也许比引入typedef要来得好,typedef也有自己的毛病。  
   
  到目前为止我还没有遇到过这样的麻烦,不过我的建议是:当你对同一个类型写了超过三次(初始化的时候两次,然后在代码中使用多于一次)的话就用这种方式吧。  
   
  除了这一小小的麻烦,我对泛型总体上感到相当满意,尤其当我读到TestND类化得如此好的Javadocs的时候。  
  Top

3 楼sean_gao(大胃 http://gaoyuxiang.cn/)回复于 2004-12-04 14:17:41 得分 0

结语  
   
  我对JDK   5.0的新功能感到非常高兴,并且为我能有机会通过参与JSR   175和JSR   201的方式影响它感到荣幸。就像所有的激进的进化一样,并非所有的功能都会受到每个人的欢迎,不过只要大多数开发者觉得某些新功能有用,并且保证向上兼容,我想JDK   5.0是Java迈向更牢固的代码的坚实一步。  
   
   
   
   
  关于作者  
  Cedric   Beust   cedric@beust.com  
  Blog:   http://www.beust.com/weblog/  
   
  Cedric   Beust是WebLogic   Server团队的高级软件工程师,并经常在他的weblog   Otaku上发表其对J2EE、   Java、   AOP、以及软件开发的见解。  
   
   
  Top

4 楼classjava(原始野人)回复于 2004-12-04 14:42:05 得分 0

呵呵,很多天前看过^_^  
  不过还是谢谢^_^Top

5 楼iiisan(學無止境)回复于 2004-12-04 15:52:22 得分 0

很好!收藏!Top

6 楼zdnetchina(天天向上)回复于 2004-12-04 16:14:47 得分 0

very   good!Top

7 楼sean_gao(大胃 http://gaoyuxiang.cn/)回复于 2004-12-06 12:57:31 得分 0

自己顶一下,希望更多有需要的人看到这篇文章。Top

8 楼greenmars2004(火球)(业余程序员)(我会的不多,不过都可以告诉你)回复于 2004-12-06 13:16:50 得分 0

帮你顶!Top

9 楼Mailbomb(网络咖啡http://blog.csdn.net/mailbomb)回复于 2004-12-06 13:43:45 得分 0

不错不错,谢谢楼主!Top

10 楼linuxbing(翅膀)回复于 2004-12-06 14:02:45 得分 0

楼主辛苦了。Top

相关问题

  • 有空吗?
  • 有空吗@@@@@@@@@@@@@@@@@@@@@@THIS TIME!!!!!
  • ZSWang,有空来坐坐//Kingron
  • 有空来转转
  • 有空来帮帮我吧
  • 有空请往里看---->
  • 有空进来坐坐。^_^
  • 谁有空帮帮我吗:)
  • 谁有空帮帮我吗:)
  • 有空来我cbuilder论坛

关键词

  • 代码
  • jdk
  • 循环
  • 语言
  • 修改
  • 解决
  • beust
  • 注解
  • cedric
  • 装箱

得分解答快速导航

  • 帖主:sean_gao

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo