微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何将常量重定向到Eclipse中的枚举?

如何使用 eclipseJava常量重命名为枚举?

我发现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封装常量字段

步骤2(可选)重命名常量.如果要重用名称,请执行此操作.

步骤3(手动)使用常量的值创建枚举.给枚举一个返回常量的getValue方法.

步骤4(手动)使用枚举中的getValue替换getter中的返回值.

第5步吸烟者.选择“所有引用”和“删除方法声明”.

步骤6内联常数.选择“所有引用”和“删除常量声明”.

如果你愿意,你可以在6之后停止,但是还有更多的功能要使用枚举的权力.

步骤7对于使用enum.getValue()作为参数的每个方法,替换与枚举传递的常量.

步骤7a更改方法签名以将枚举添加为参数.

步骤7b(手动)将枚举实例作为新参数传递给getValue调用.确保找到所有的实例,否则会出现问题.

步骤7c(手动)在该方法中,使用新的枚举参数而不是常量.如果您在步骤7b中错过了呼叫,那么您的测试将在此失败.

步骤7d更改方法签名以删除旧常数.

步骤8(手动)对于每个使用enum.getValue()在布尔逻辑中确定是否可以使用枚举.

步骤9如果getValue方法不再使用,可以将其删除.

步骤9a(手动)删除未使用的getValue方法

步骤9b(手动)在构造函数删除字段和赋值.

步骤9c更改方法签名以从枚举构造函数删除该值.

步骤9d(手动)如果没有其他参数,请删除枚举构造函数.

例如:

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");

步骤7a更改方法签名添加枚举作为参数.

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()))
    {

步骤7d更改方法签名以删除旧常数

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);
}

}

原文地址:https://www.jb51.cc/java/125397.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐