龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

JBuilder2005实现重构之升级到JDK5.02[图]

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
3、自动装/拆箱 每个基本数据类型如double、int都有对应的封装类Double、Integer,在低版本的JDK中,需要一些无聊的代码完成基本数据类型到对应封装类的转换。JDK 5.0的自动装/拆箱特性可
3、自动装/拆箱
  
  
  每个基本数据类型如double、int都有对应的封装类Double、Integer,在低版本的JDK中,需要一些无聊的代码完成基本数据类型到对应封装类的转换。JDK 5.0的自动装/拆箱特性可以自动完成这种转换,使代码更加简洁,来看下面未用自动装/拆箱的代码:
  
  代码清单 13 未使用自动装/拆箱的代码
  
  1. package myrefactor ;
  2. public class Jdk5
  3. {
  4. …
  5. public static void autoBoxingPreliminary(Integer intObject)
  6. {
  7. System.out.println(intObject) ;
  8. }
  9.
  10. public static void autoBoxingRefactoring()
  11. {
  12. autoBoxingPreliminary(new Integer(8)) ;
  13. }
  14. …
  15. }

  第5~8行定义的autoBoxingPreliminary()方法需要一个Integer的入参,autoBoxingRefactoring()在第12行老老实实满足了这种要求。JBuilder提供了一个非常方便进行自动装/拆箱重构的方法,打开需要做此重构的类,在编辑器的任何地方:Ctrl+Shift+R->Introduce Auto(un)boxing,JBuilder搜索当前Class文件需要自动装/拆箱的地方,一并重构。如上面的代码段进行自动装/拆箱重构后,将调用为:
  
  代码清单 14 自动装/拆箱重构后的代码
  
  1. package myrefactor ;
  2. public class Jdk5
  3. {
  4.  …
  5.  public static void autoBoxingPreliminary(Integer intObject)
  6.  {
  7.   System.out.println(intObject) ;
  8.  }
  9.
  10.  public static void autoBoxingRefactoring()
  11.  {
  12.   autoBoxingPreliminary(8) ;
  13.  }
  14.  …
  15. }

  第12行直接传入8而非new Integer(8),代码工整了许多。
  
  4、非泛型转泛型
  
  在低版本中,集合中的对象在使用前需要进行显示的类型转换,如String s = (String)iter.next(),JDK 5.0引入了泛型的概念,加入了编译期类型安全检查,取消了强制类型转换,节省了代码,下面是大家熟悉的传统的List操作代码:
  
  代码清单 15 非泛型的代码
  
  1. public static void genericsArrayList()
  2. {
  3.  List list = new ArrayList() ;
  4.  list.add(0 , new Integer(23)) ;
  5.  int total = ( (Integer) list.get(0)).intValue() ;
  6.  System.out.println(total) ;
  7. }

  将光标移到第3行(即集合定义的代码行):Ctrl+Shift+R->Introduce Generics调出泛型重构对话框:
  
   
     图 23 泛型重构对话框
  
  在Type Argument中指定一个数据类型,JBuilder已经通过分析代码默认了最适合的数据类型,一般情况下无需调整。按OK后完成泛型的代码重构:
  
  代码清单 泛型的代码
  
  1. public static void genericsArrayList()
  2. {
  3.  Listlist = new ArrayList() ;
  4.  list.add(0 , new Integer(23)) ;
  5.  int total = (list.get(0)).intValue() ;
  6.  System.out.println(total) ;
  7. }

  注重第3行和第5行代码的变化。也许有人会指出第4行应该调整为list.add(23)才对啊?是的,只需要你调用前一小节的自动装/拆箱重构就可以完成这样的转换了。
  
精彩图集

赞助商链接