Welcome 微信登录

首页 / 软件开发 / JAVA / 探索Eclipse JDT中的重构功能

探索Eclipse JDT中的重构功能2011-04-09 IBM Prashant DevaEclipse 中的重构功能使其成为了一个现代的 Java 集成开发环境 (IDE),而不再是一个 普通的文本编辑器。使用重构,您可以轻松更改您的代码,而不必担心对别处造成破坏。有 了重构,您可以只关注于所编写代码的功能,而不必分心去考虑代码的外观如何,因为之后 您可以使用重构工具来快捷地将代码变成整洁而高度模块化的代码。本文将向您介绍如何使 用 Eclipse 中的一些功能强大的重构函数。

重构类型

重命名

Rename 应该是 Eclipse 中重常用的重构。利用这个重构,可以对变量、类、方法、包、 文件夹及几乎任何的 Java 标识符进行重命名。当重命名某标识符时,对该标识符的所有引 用也将被重命名。调用 Rename 重构的快捷方式是 Alt+Shift+R。当在 Eclipse 编辑器中对 某标识符调用这个快捷方式时,在此编辑器中会出现一个小对话框,可以在这个对话框中修 改这个标识符的名字。在按下 Enter 键时,所有对该标识符的引用也将被相应更改。

Move

使用 Move,可以将一个类从一个包移动到另一个包。这个类被物理地移动到目的包所对 应的文件夹中,并且对这个类的所有引用也被更改为指向新的包。

如果将一个类拖放到 Package Explorer 视图中的一个新包中,这个重构将会自动发生。

Extract Local Variable

使用 Extract Local Variable 重构,可以将一个 Java 表达式的结果分配给一个新的本 地变量。这个重构的一个用途就是通过将一个复杂的 Java 表达式分成多行来简化该表达式 。或者,在编辑代码时,先键入此表达式并使用这种重构自动创建一个新本地变量来指定表 达式的结果。当返回值的类型很复杂时,这个重构将很有用,因为变量的类型是自动生成的 。

此重构可以从编辑器调用。在键入想要将其分配给某变量的表达式后,按下 Ctrl+1 并选 择 Assign statement to a local variable。这样一个具有适当类型的新变量就创建好了。

Extract Constant

Extract Constant 重构可以将代码中的任何数字或字符串文字转换成一个静态终态字段 (final field)。在重构后,所有对这个类中的数字或字符串文字的使用都将指向该字段, 而不是指向数字或字符串文字本身。这样,在一个位置(字段的值)就可以实现对所有数字 或字符串文字的修改,再也无需在整篇代码中执行查询和替代了。

要使用这个重构,请选择编辑器中的数字或字符串文字,然后按下 Ctrl+1 并选择 Extract to Constant。

Convert Local Variable to Field

正如其名称所示,这个 Convert Local Variable to Field 重构能够获取一个本地变量 并将这个变量转换为此类的一个私有字段。此后,所有对这个本地变量的引用也将指向该字 段。

要使用这个重构,请选择一个本地变量,然后按下 Ctrl+1 并选择 Convert Local Variable to Field。

Convert Anonymous Class to Nested

Convert Anonymous Class to Nested 重构能够接受一个匿名类并将其转换为最初包含这 个匿名类的方法的一个嵌套类。

要使用这个重构,请将光标放入这个匿名类并从菜单中选择 Refactor > Convert Anonymous Class to Nested。这时会出现一个对话框,要求输入新类的名称。此外,还可以 设置类的属性,比如指定对这个类的访问是公共的、受保护的、私有的还是默认的。也可以 指定这个类是终态的、静态的还是两者都是。

例如,清单 1 所示的代码使用一个匿名类创建了一个 Thread Factory。

清单 1. 在执行 Convert Anonymous Class to Nested 重构前

void createPool() {
threadPool = Executors.newFixedThreadPool(1, new ThreadFactory()
{

@Override
public Thread newThread(Runnable r)
{
Thread t = new Thread(r);
t.setName("Worker thread");
t.setPriority(Thread.MIN_PRIORITY);
t.setDaemon(true);
return t;
}

});
}