JBuilder2005实现重构之进级到JDK5.0
副标题#e#
JDK 5.0在语法上做很多重大的改造,固然在低版本JDK中开拓的源代码险些可以不做任何修改就可直接运行于JDK 5.0中。但照旧有必需举办版本进级的重构,这样就可以应用JDK 5.0的for和while轮回、自动装/拆箱、泛型等改造成果,在使代码越发紧凑的同时,使代码机能获得优化。所以JBuilder专门为低版本晋升到JDK 5.0的措施提供了3个重组成果,利便你无缝地实现进级。
1、使工程基于JDK 5.0
虽说JBuilder 2005支持JDK 5.0,但其默认的JDK版本是1.4.2,要使工程的JDK版本为5.0,你必需安装JDK 5.0,并在JBuilder下举办相应的配置。关于JDK 5.0的具体配置我们不作过多的描写,简而言之,它主要包罗以下的步调:
1) 安装JDK 5.0(从http://java.sun.com/j2se/1.5.0/download.jsp下载)。
2) Tools->Configure->JDKs…通用指定JDK5.0的安装路径配置JDK。
3) Project->Project Properties…->在Paths配置页,将JDK配置为JDK 5.0。
4) Project->Project Properties…->Build->在Java配置页,将Language features:配置为Java 2 SDK,V 5.0(generics enabled),将Target VM配置为Java 2 SDK,v 5.0 and later。
只有将工程的JDK版本配置为JDK 5.0,才可以举办有关JDK 5.0的代码重构。
2、优化轮回
JDK 5.0引入了更高效的轮回,称之为JDK 5.0样式的轮回,包罗:
·数组遍历
·List遍历
·Iterator的for轮回
·Iterator的while轮回
JBuilder提供了将低版本JDK对应的轮回代码转换这JDK5.0轮回气势气魄的重构要领,我们通过一个数组遍历的重构对此做说明,请看下面的低版本JDK轮回代码:
代码清单 11 低版本轮回样式
1. public static void arrayLoopRefactoring()
2. {
3. int[] myArray = {1 , 2 , 3 , 4} ;
4. for(int x = 0 ; x < myArray.length ; x++) {
5. System.out.println(myArray[x]) ;
6. }
7. }
将光标移到第4行的for(int x = 0 ; x < myArray.length ; x++) 中间:Ctrl+Shift+R->Introduce Foreach调出轮回重构对话框:
图 22 轮回重构对话框
在Loop variable name中为数组轮回姑且变量指定一个变量名,这里我们配置为item,按OK完成重构,JBuilder生成JDK 5.0气势气魄轮回代码,如下所示:
代码清单 12 JDK 5.0样式轮回
1. public static void arrayLoopRefactoring()
2. {
3. int[] myArray = {1 , 2 , 3 , 4} ;
4. for(int item : myArray) {
5. System.out.println(item) ;
6. }
7. }
#p#副标题#e#
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后完成泛型的代码重构:
代码清单 泛型的代码
#p#分页标题#e#
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)才对啊?是的,只需要你挪用前一小节的自动装/拆箱重构就可以完成这样的转换了。