gpt4 book ai didi

java - 如何在 Eclipse 中将常量重构为枚举?

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:06 25 4
gpt4 key购买 nike

如何使用 Eclipse 将 Java 常量重构为枚举?

我发现 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,我太老了,不能改掉坏习惯 ;-)

最佳答案

这里有一组自动和手动步骤来执行此重构。

Step 1 在常量上封装字段

第 2 步(可选)重命名常量。如果您想重复使用这些名称,请执行此操作。

第 3 步(手动)使用常量值创建枚举。为枚举提供一个返回常量的 getValue 方法。

第 4 步(手动)将 getter 中的返回值替换为枚举中的 getValue。

第 5 步内联 setter/getter 。选择“所有引用”和“删除方法声明”。

第 6 步内联常量。选择“所有引用”和“删除常量声明”。

如果你愿意,你可以在 6 点后停止,但要使用枚举的力量还有很多工作要做。

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

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

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

步骤 7c(手动)在该方法中,使用新的枚举参数代替常量。如果您在步骤 7b 中错过了一个调用,您的测试将在此处失败。

第 7d 步更改方法签名以删除旧常量。

第 8 步(手动)对于 boolean 逻辑中 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);
}

}

第一步

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

第三步创建枚举

    public static enum AnEnum {
CONSTANT1(_CONSTANT1), CONSTANT2(_CONSTANT2);

private final String value;

AnEnum(String aValue)
{
value = aValue;
}

public String getValue()
{
return value;
}
}

第 4 步替换常量 getter 中的返回值

    public static String getConstant1() {
return AnEnum.CONSTANT1.getValue();
}

public static String getConstant2() {
return AnEnum.CONSTANT2.getValue();
}

第 5 步内联常量 getter

public void method(String aConstant)
{
if(aConstant.equals(AnEnum.CONSTANT2.getValue()))
{
//do something
}
}

public void anotherMethod()
{
method(AnEnum.CONSTANT1.getValue());
}

第六步内联常量

    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 步对于 boolean 逻辑中 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);
}

}

关于java - 如何在 Eclipse 中将常量重构为枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13247168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com