下面将简单展示两个重构技巧“提炼方法(Refactoring:Extract Method)”和“搬移方法(Refactoring:Move Method)”如何通过Eclipse自动实施。给出原始代码,如下所示。
HelloBean.java
package ch2.extractandmovemethod.prototype;
public class HelloBean {
public void sayHello() {
System.out.println("朋友,时刻重构吧!");
}
}
RefactoringIDETest.java
package ch2.extractandmovemethod.prototype;
public class RefactoringIDETest {
public static void main(String[] args) throws Exception {
String className = "ch2.refactoringusingide.HelloBean";
Object beanInstance = null;
try {
Class clazz = Class.forName(className);
beanInstance = clazz.newInstance();
} catch (Exception ex) {
throw ex;
}
((HelloBean)beanInstance).sayHello();
}
}
注意上述代码的框选部分,显然这部分代码可以被提炼出来形成一个公用方法。
说明:如果使用重构工具,只需简单地圈选出要提炼的段落,然后点选菜单选项“Extract Method”就行了。重构工具会自动检查被圈选的代码段是否可以提炼。代码无法提炼的原因有很多,可能是:它可能只包含部分标识符声明;可能对某个变量赋值而该变量又被其它代码用到。所有这些情况,程序员都完全不必担心,因为重构工具会自动识别并处理一切。随后,工具会自动计算出新方法所需的参数,并要求程序员为新方法取一个名字。此时,程序员可自行决定新方法参数的命名、排列顺序等。所有准备工作都完成后,重构工具会把圈选的代码从源方法中提炼出来,并在源方法中加入对新方法的调用。随后它会再源方法所属的类中建立新的方法,并以程序员指定的名称来命名该方法。整个重构过程耗时极短,且不会出错,相比手工进行这个重构,方便、安全了许多,体现了自动化重构工具的威力。
现在用Eclipse来实现上述步骤,首先选中上述代码的框选部分,点击鼠标右键,找到重构菜单“Refactor”,点选“Extract Method” (注意,重构菜单会自动识别出当前圈选的代码段有哪些重构技巧可用),如图1所示。
图1 自动化重构过程第一步
在随后出现的对话框中,为提炼出的新方法命名(命名为“instantiateClass”),并决定其它的方法签名(注意,为了后续可以不用修改地将此方法搬移到另一个工具类中,请选择“public”的方法访问权限),如图2所示。
图2 自动化重构过程第二步
点选“Preview”可预览重构所牵动的资源和结果,点选“OK”将直接进行重构,点选“Cancel”将放弃重构,当然即使在重构完成后,Eclipse也提供了强大的重构回复功能,可将所有牵动的代码回复到重构前的状态,甚至还有重构的历史回复功能。现在,点击“OK”,得到应用了(Refactoring:Extract Method)后的代码,如下所示。
RefactoringIDETest.java
package ch2.extractandmovemethod;
import ch2.extractandmovemethod.prototype.HelloBean;
public class RefactoringIDETest {
public static void main(String[] args) throws Exception {
String className = "ch2.refactoringusingide.HelloBean";
Object beanInstance = instantiateClass(className);
((HelloBean)beanInstance).sayHello();
}
public static Object instantiateClass(String className) throws Exception {
Object beanInstance = null;
try {
Class clazz = Class.forName(className);
beanInstance = clazz.newInstance();
} catch (Exception ex) {
throw ex;
}
return beanInstance;
}
}
融智技术学苑(
http://www.rzchina.net)版权所有,本公司致力于提供更好更实用的Java培训课程,帮助学员迅速成为编程的行家里手,更多Java面试题\Java视频\Java教程请访问我们的网站.转载请保留这段文字。