gpt4 book ai didi

java - 在方法中重构多个 if-else 条件

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:58 25 4
gpt4 key购买 nike

我正在重构现有代码。它实际上工作正常,但它有点困惑,因为多个 if-else 条件语句检查一个变量的值并将第二个变量的值更改为从固定枚举结构中获取的更新值。

else if (var1 == 'valueX')
{
if (var2 == MyEnum.A)
var2 = MyEnum.B;
else if (var2 == MyEnum.B)
var2 = MyEnum.C;
else if (var2 == MyEnum.C)
var2 = MyEnum.D;
else if (var2 == MyEnum.D)
var2 = MyEnum.A;
}

else if (....)
{
..similar block of conditionals
}

对于重构和清理此代码的最佳方法,我有点困惑。你会建议使用开关吗?或者更优雅的东西?

提前致谢!

最佳答案

重构条件的经典答案是 Replace Conditional With Polymorphism .在这种情况下,如果每个 MyEnum 都知道它的后继者是什么,你可以简单地说(在 'valuex' 的情况下:var2 = var2.successor。对于 var1 - 如果它可以是一个对象,它实现了一个知道如何处理的接口(interface)无论您在循环中做什么,每个实现类都知道它具体应该做什么……好了,您就完成了。

更新:

下面是测试用例中的一个漂亮的小后继函数:

public class EnumTest extends TestCase {
private enum X {
A, B, C;
public X successor() {
return values()[(ordinal() + 1) % values().length];
}
};

public void testSuccessor() throws Exception {
assertEquals(X.B, X.A.successor());
assertEquals(X.C, X.B.successor());
assertEquals(X.A, X.C.successor());
}
}

关于java - 在方法中重构多个 if-else 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215207/

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