移动内部类到上一级
此重构支持将内部类移至上层,这个重构将包外的类、函数、变量、常量和命名空间移动到一个包中。
执行重构
- 在代码编辑器中,将光标放在要移动到上层的内部类(非静态内部类)的声明位置。
- 单击右键展示上下文菜单,选择。
- 在打开的“将内部类移动到上一级”对话框中,提供移动类的名称和其他重构选项。
- 要保留移动类对其以前的外部类的访问权限,请勾选复选框“将外部类的实例作为参数传递”。
- 要在搜索代码中移动类的引用,请勾选“在注释和字符串中搜索”和“搜索文本出现次数”复选框 。
如下图所示:
图1 将内部类移动到上一级
- 单击“重构”以应用重构。
示例
例如,将InnerClass移动到上层。要保留从InnerClass到OuterClass的访问,OuterClass的实例将作为参数传递给InnerClass。
重构前
“com\refactoring\source\OuterClass.java” 文件内容如下:
class OuterClass {
String str = "test";
public void outermethod(){
InnerClass ic = new InnerClass();
ic.print();
}
class InnerClass {
public void print(){
System.out.println(str);
}
}
}
重构后
“com\refactoring\source\OuterClass.java” 文件删除内部类, 文件内容如下:
class OuterClass {
String str = "test";
public void outermethod(){
InnerClass ic = new InnerClass(this);
ic.print();
}
}
新增“com\refactoring\source\InnerClass.java”文件,文件内容如下:
class InnerClass {
private final OuterClass outerClass;
public InnerClass(OuterClass outerClass) {
this.outerClass = outerClass;
}
public void print() {
System.out.println(outerClass.str);
}
}