Eclipse开发经典教程:代码重构(三)

 

结构性重构 

    结构性重构涉及到Java元素的物理结构的改变,包括“Rename”、“Move”、“Change Method Signature”、“Convert Anonymous Class to Nested”和“Move Member Type to New File”,下面将一一介绍这些重构在Eclipse中的实现。



1. Rename 



Rename重构的功能就是重命名Java元素。虽然可以通过手动修改文件的文件名或其它Java元素的名称,但这种方式不会更新与此Java元素相关联的引用,用户必须手动查找和此Java元素相关的位置,然后进行手动修改。通过手动修改名称的方式,造成笔误的可能性会太太增加。通过Eclipse提供的Rename的功能,Eclipse会自动完成更新相关引用的操作。 

当Java元素的命名不清晰或功能发生改变的时,为了保持代码的可读性,可以通过Eclipse的重构功能重命名Java元素。选择相应的Java元素,选择右键Refactor菜单下的Rename菜单,可以对当前选择的元素进行重命名,在弹出的重命名对话框中修改相应的元素名称即可,例如修改一个包的重命名,如图2所示。



图2 Rename对话框



要修改包名的同时,可以选择是否更新引用和更新子目录,甚至是非Java文件也可以选择性的更新。选择Preview按钮可以预览重命名重构后的效果,如图3所示。



图3 预览重命名包名

可以查看预览的内容是否一致,确认是否要进行重命名的重构。可以进行重命名的Java元素有Java项目、Java文件、包、方法和属性字段等。 



提示:非Java项目和Java文件等也可以通过重构菜单的Rename进行重命名。



2. Move 



Move的重构和Rename的重构类似,它可以把一个Java元素从一个地方移动到另一个地方,Move的重构主要用来移动一个类到不同的包下。首先选中一个Java文件,选择Refactor菜单下的Move菜单项,弹出Move的重构对话框,如图4所示。



图4 Move对话框



可以选择是否更新引用,设定移动文件重构的一些参数。



提示:也可以通过拖动的方式把一个文件从一个包移动到另一个包,实现移动文件的重构。



3. Change Method Signature 



“Change Method Signature”重构的功能是改变方法的定义,例如改变方法的参数名称、类型和个数、返回值的类型,方法的可见性以及方法的名称等。 



要改变方法的定义,可以先选择方法,通过右键菜单选择Refactor菜单的“Change Method Signature”子菜单项,弹出“Change Method Signature”对话框,如图5所示。



图5 “Change Method Signature”对话框



可以通过“Change Method Signature”对话框改变方法的参数名称、类型和个数、返回值的类型,方法的可见性以及方法名称等。 



4. Convert Anonymous Class to Nested 



“Convert Anonymous Class to Nested”重构的功能是把匿名类改成内部类,这样同一个类的其它部分也可以共享此类了。 

例如有例程1所示的类。 



例程1 KeyListenerExample.java

 
 
public class KeyListenerExample {
Display display;
Shell shell;
KeyListenerExample() {
display = new Display();
shell = new Shell(display);
shell.setSize(250, 200);
shell.setText("A KeyListener Example");
Text text = new Text(shell, SWT.BORDER);
text.setBounds(50, 50, 100, 20);
text.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
System.out.println("key Pressed -" + e.character);
}
public void keyReleased(KeyEvent e) {
System.out.println("key Released -" + e.character);
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public static void main(String[] args) {
new KeyListenerExample();
}
} 

在KeyListenerExample类有一个匿名类,实现了KeyListener接口,可以把这个匿名类改成内部类,首先选择匿名类,右键选择Refactor的“Convert Anonymous Class to Nested”菜单,输入内部类的名称,如图6所示。

 图6 “Convert Anonymous Class to Nested”对话框

重构后的结果是Eclipse为此创建了一个内部类,名称为TestKeyListener,重构后的代码如例程2所示。  例程2 重构后的KeyListenerExample.java

 
 
public class KeyListenerExample {
private final class TestKeyListener implements KeyListener {
public void keyPressed(KeyEvent e) {
System.out.println("key Pressed -" + e.character);
}
public void keyReleased(KeyEvent e) {
System.out.println("key Released -" + e.character);
}
}
Display display;
Shell shell;
KeyListenerExample() {
display = new Display();
shell = new Shell(display);
shell.setSize(250, 200);
shell.setText("A KeyListener Example");
Text text = new Text(shell, SWT.BORDER);
text.setBounds(50, 50, 100, 20);
text.addKeyListener(new TestKeyListener());
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public static void main(String[] args) {
new KeyListenerExample();
}
} 

也可以通过“Convert Anonymous Class to Nested”对话框定义新生成的内部类的可访问性。  5. Move Member Type to Top Level  通过“Move Member Type to Top Level”的重构方式,可以把内部类改成非内部类,并且重新创建一个新的文件,这样其它的类就可以共享此类。  例程2创建了一个内部类TestKeyListener,现在可以通过“Move Member Type to Top Level”重构的方式,把TestKeyListener放入一个单独的类中。首先选择TestKeyListener类,从右键菜单Refactor中选择“Move Member Type to Top Level”,打开“Move Member Type to Top Level”对话框,如图7所示。

 图7 “Move Member Type to Top Level”对话框

通过上面“Move Member Type to Top Level”重构,可以把内部类改成非内部类。 提示:有些时候,重构并不是一步完成的,可以一步一步重构,例如,首先把匿名类改成内部类,再接着把内部类改成非内部类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值