移动和复制重构
最后修改时间:2023 年 9 月 23 日复制重构允许您在不同的包中创建类的副本。它还允许您在不同的目录或包中创建文件、目录或包的副本。
提示
您可以通过上下文菜单访问所有重构操作。
执行复制重构
- 选择要重构的标识符(例如,编辑器中的类或项目工具窗口中的文件)。 
- 转到重构 | 复制或按。F5 
- 在“复制”对话框中,指定副本的名称和位置,然后单击“确定”。 
移动重构允许您在项目的源根之间移动包和类,将类成员移动到其他类,将内部类移动到更高的层次结构级别。例如,如果方法或字段在另一个类中使用的次数多于在其自己的类中使用的次数,则可以对方法或字段执行移动重构。
执行移动重构
- 选择您要重构的标识符。 
- 转到重构 | 移动或按。F6 
- 在打开的对话框中,根据您为重构选择的项目,指定适当的选项并单击“重构”(对于包,单击“确定” )。您还可以单击“预览”(如果可用)来预览潜在的更改。 
- 指定目标目录的路径、文件名和包名称。 
笔记
当您对包执行移动重构时,您需要指定将包及其内容移动到何处(到另一个包、源根目录或另一个目录)。
提示
要撤消重构,请按。Ctrl0Z
提示
Move重构也可以从UML 类图中获得。
将静态方法移至另一个类
- 在编辑器中打开类,将插入符号放在要移动的静态方法处,然后按( Refactor | Move )。F6 - “移动静态成员”对话框打开。 
- 在“到(完全限定名称)”字段中,键入要将方法列表中选定的成员移动到的类的完全限定名称。 - 您可以单击该 - 图标来选择或搜索现有课程。 
- 在“要移动的成员(仅限静态)”字段中,选中要移动到另一个类的方法旁边的复选框。 - 该列表显示当前类中检测到的所有静态方法。 
- 单击“重构”继续或在实际重构之前单击“预览”检查结果。 

将实例方法移至另一个类
如果实例(非静态)方法在项目中具有类型参数,则可以将其移动到不同的类。在任何其他情况下,您都需要static首先执行此方法。

- 在编辑器中,将插入符号放在实例方法处,然后按( Refactor | Move )。F6 - “移动实例方法”对话框打开。 
- 从“选择实例表达式”列表中,选择要将实例方法移动到的目标类。 - 潜在移动目标的列表包括当前类中的方法参数的类和字段的类。 
- 在“可见性”区域中,选择目标方法的首选可见性修饰符。 
- 在为“参数引用”参数选择名称字段中,输入所需的参数名称。 - 执行重构时,将为正在移动的方法添加参数,这将替换对当前类的所有参数引用。 
- 单击“重构”继续或在实际重构之前单击“预览”检查结果。 

让我们将getName实例方法从Test类移至类中Car。
前
import java.lang.reflect.InvocationTargetException;public class Test {    public static void main(String[] args) throws Exception {        Car c= new Car();        System.out.println(new Test().getName(c));    }    String getName(Car car){        System.out.print(toString());        return car.name;    }}class Car {    String name = "Default Car";    Car() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {    }}后
import java.lang.reflect.InvocationTargetException;public class Test {    public static void main(String[] args) throws Exception {        Car c= new Car();        System.out.println(c.getName(new Test()));    }}class Car {    String name = "Default Car";    Car() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {    }    String getName(Test anotherObject){        System.out.print(anotherObject.toString());        return this.name;    }}感谢您的反馈意见!