
# 移动实例方法
如果方法在项目中具有类型参数，则此重构允许将实例（非静态）方法移动到其他类。
#### 执行重构
1. 在代码编辑器中，将光标放在要移动到另一个类的实例方法的声明上。
2. 在单击右键展示上下文菜单，选择**"重构 \> 移动实例方法..."** 。
   
   ![](https://support.huaweicloud.com/usermanual-codeartside/public_sys-resources/note_3.0-zh-cn.png)
   如果该方法在项目中没有类型参数，则需要将其设置为静态，然后将其移动到所需的目标类。有关详细信息，请参见[将内部类或实例转换为静态](https://support.huaweicloud.com/usermanual-codeartside/codeartside_01_0146.html)和[移动静态成员](https://support.huaweicloud.com/usermanual-codeartside/codeartside_01_0122.html)。
   
   
3. 在打开的**"移动实例方法"** 对话框中，提供重构选项。
   
   - 在**"选择一个实例表达式"**列表中，选择要将实例方法移动到的目标类。潜在移动目标的列表包括当前类中的方法参数的类和字段的类。
   
   - 为将要移动的方法添加参数名称，并将替换对当前类所有参数的引用。
   
   - 在**"可见性"** 区域中，指定移动方法的可见性修改器，或选择**"升级"** 以自动将可见性设置为所需的级别。
     如下图所示：
     图1移动示例方法   
     ![](https://support.huaweicloud.com/usermanual-codeartside/zh-cn_image_0000002351464242.png "点击放大") 
   
   
   
   
4. 单击**"重构"**以应用重构。
 
#### 示例
例如，将实例方法**getName** 从**Car** 类移动到**MoveInstanceMethod**类方法。
**重构前**
"com\\refactoring\\source\\MoveInstanceMethod.java"文件内容如下：
```
public class MoveInstanceMethod {
    public static void main(String[] args) throws Exception {
        Car c = new Car();
        System.out.println(c.getName(new MoveInstanceMethod()));
    }
}
class Car {
    String name = "Default Car";
    String getName(MoveInstanceMethod anotherObject) {
        System.out.print(anotherObject.toString());
        return this.name;
    }
}
```
**重构后**
"com\\refactoring\\source\\MoveInstanceMethod.java"文件的类"Car"将实例方法移动到"MoveInstanceMethod"类中，文件内容如下：
```
public class MoveInstanceMethod {
    public static void main(String[] args) throws Exception {
        Car c = new Car();
        System.out.println(new MoveInstanceMethod().getName(c));
    }
    String getName(Car car) {
        System.out.print(toString());
        return car.name;
    }
}
class Car {
    String name = "Default Car";
}
```
