我发现eclipse中没有内置的功能:
http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fref-menu-refactor.htm
我发现一个插件:
http://code.google.com/p/constants-to-enum-eclipse-plugin/.我想知道这个插件是不是要走,或者任何人使用更好的方法.
我可以随时自己创建一个枚举类,并在2012年将其复杂化.请不要指向另一个IDE,我太老了,也改变不好的习惯;-)
解决方法
步骤1封装常量字段
步骤3(手动)使用常量的值创建枚举.给枚举一个返回常量的getValue方法.
步骤4(手动)使用枚举中的getValue替换getter中的返回值.
步骤6内联常数.选择“所有引用”和“删除常量声明”.
如果你愿意,你可以在6之后停止,但是还有更多的功能要使用枚举的权力.
步骤7对于使用enum.getValue()作为参数的每个方法,替换与枚举传递的常量.
步骤7b(手动)将枚举实例作为新参数传递给getValue调用.确保找到所有的实例,否则会出现问题.
步骤7c(手动)在该方法中,使用新的枚举参数而不是常量.如果您在步骤7b中错过了呼叫,那么您的测试将在此失败.
步骤8(手动)对于每个使用enum.getValue()在布尔逻辑中确定是否可以使用枚举.
例如:
public class Initial { public static final String CONSTANT1 = "value1"; public static final String CONSTANT2 = "value2"; public void method(String aConstant) { if(aConstant.equals(CONSTANT2)) { //do something } } public void anotherMethod() { method(CONSTANT1); } }
步骤1
private static final String CONSTANT1 = "value1"; private static final String CONSTANT2 = "value2"; public void method(String aConstant) { if(aConstant.equals(getConstant2())) { //do something } } public void anotherMethod() { method(getConstant1()); } public static String getConstant1() { return CONSTANT1; } public static String getConstant2() { return CONSTANT2; }
步骤2重命名常数
private static final String _CONSTANT1 = "value1"; private static final String _CONSTANT2 = "value2"; ... public static String getConstant1() { return _CONSTANT1; } public static String getConstant2() { return _CONSTANT2; }
步骤3创建枚举
public static enum AnEnum { CONSTANT1(_CONSTANT1),CONSTANT2(_CONSTANT2); private final String value; AnEnum(String aValue) { value = aValue; } public String getValue() { return value; } }
步骤4替换Constant getter中的返回值
public static String getConstant1() { return AnEnum.CONSTANT1.getValue(); } public static String getConstant2() { return AnEnum.CONSTANT2.getValue(); }
第5步将不断的吸气器插入
public void method(String aConstant) { if(aConstant.equals(AnEnum.CONSTANT2.getValue())) { //do something } } public void anotherMethod() { method(AnEnum.CONSTANT1.getValue()); }
步骤6内联常数
public static enum AnEnum { CONSTANT1("value1"),CONSTANT2("value2");
public void method(String aConstant,AnEnum theEnum) .... public void anotherMethod() { method(AnEnum.CONSTANT1.getValue(),null); }
步骤7b将枚举实例作为新参数传递给getValue调用
public void anotherMethod() { method(AnEnum.CONSTANT1.getValue(),AnEnum.CONSTANT1); }
步骤7c使用新的枚举参数,而不是旧的传递值.
if(theEnum.getValue().equals(AnEnum.CONSTANT2.getValue())) {
public void method(AnEnum theEnum) .... public void anotherMethod() { method(AnEnum.CONSTANT1); }
步骤8对于每个使用enum.getValue()在布尔逻辑中,确定是否可以使用枚举.
if(theEnum.equals(AnEnum.CONSTANT2)) { //do something }
步骤9a删除未使用的getValue方法
步骤9b(手动)在构造函数中删除字段和赋值.
步骤9c更改方法签名以从枚举构造函数中删除该值.
步骤9d(手动)如果没有其他参数,请删除枚举构造函数.
public static enum AnEnum { CONSTANT1,CONSTANT2; }
所以最后代码如下所示:
public class Step9d { public static enum AnEnum { CONSTANT1,CONSTANT2; } public void method(AnEnum theEnum) { if(theEnum.equals(AnEnum.CONSTANT2)) { //do something } } public void anotherMethod() { method(AnEnum.CONSTANT1); } }