
# 移动静态成员
此重构允许将类的静态成员移动到不同的类中。
#### 执行重构
1. 在代码编辑器中，将光标放置在要移动到另一个类的静态成员（字段或方法）的声明上。
2. 单击右键展示上下文菜单，选择**"重构 \> 移动静态成员..."**。
3. 在打开的**"移动静态成员"** 对话框中，提供重构选项。
   
   - 提供有效的目标类名称。
   
   - 在**"要移动的成员"**列表中，选中要移动的静态成员复选框。
   
   - 在**"可见性"** 区域中，指定移动的静态成员的可见性修改器，或选择**"升级"**以自动将可见性设置为所需的级别。
   
   - 选中**"如果可能，作为枚举常量移动"** 复选框，将常量（即**static final** 字段）作为枚举常量移动到枚举类型。如果枚举类型的构造函数有类型参数，则可以作为枚举常量进行移动。
     如下图所示：
     图1移动静态成员   
     ![](https://support.huaweicloud.com/usermanual-codeartside/zh-cn_image_0000002385179937.png "点击放大") 
   
   
   
   
4. 单击**"重构"**以应用重构。
 
#### 示例
例如，将类MoveStaticMembers的静态成员"STATICFINALSTR"移动到枚举类**MyEnum** 。由于**MyEnum** 有一个带有**String** 类型参数的构造函数，因此可以使用"如果可能，作为枚举常量移动选项"将**STATICFINALSTR** 和**staticStr**字段移动为枚举常量。
**重构前**
"com\\refactoring\\source\\MoveStaticMembers.java"文件内容如下：
```
package com.refactoring.source;
import java.util.List;
class MoveStaticMembers {
    Boolean isTrue;
    public static final String STATICFINALSTR = "TEST";
    static List<Integer> staticList;
    static int[] staticN;
    private static final String staticStr = "test";
    public static void staticMethod() {
        System.out.println(staticStr);
    }
    private static Boolean staticMethod2() {
        return true;
    }
    void method() {
    }
}
enum MyEnum {
    ;
    String typeName;
    MyEnum(String name) {
        typeName = name;
    }
}
```
**重构后**
将"com\\refactoring\\source\\MoveStaticMembers.java"文件中的静态成员"STATICFINALSTR"移动到MyEnum中，修改后的文件内容如下：
```
package com.refactoring.source;
import java.util.List;
class MoveStaticMembers {
    Boolean isTrue;
    static List<Integer> staticList;
    static int[] staticN;
    private static final String staticStr = "test";
    public static void staticMethod() {
        System.out.println(staticStr);
    }
    private static Boolean staticMethod2() {
        return true;
    }
    void method() {
    }
}
enum MyEnum {
    STATICFINALSTR("TEST");
    String typeName;
    MyEnum(String name) {
        typeName = name;
    }
}
```
