移动内部类到上一级
此重构支持将内部类移至上层,这个重构将包外的类、函数、变量、常量和命名空间移动到一个包中。
执行重构
- 在代码编辑器中,将光标放在要移动到上层的内部类(非静态内部类)的声明位置。
- 单击右键展示上下文菜单,选择 。
- 在打开的“将内部类移动到上一级”对话框中,提供移动类的名称和其他重构选项。
- 要保留移动类对其以前的外部类的访问权限,请勾选复选框“将外部类的实例作为参数传递”。
- 要在搜索代码中移动类的引用,请勾选“在注释和字符串中搜索”和“搜索文本出现次数”复选框 。
如下图所示:
图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); } }