当前位置: 首页 > 面试题库 >

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

郎伟兆
2023-03-14
问题内容

我正在重构现有代码。它实际上可以正常工作,但是在检查一个变量的值并将第二个变量的值更改为取自固定枚举结构的更新后的值的多个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
}

我对重构和清理此代码的最佳方法感到有些困惑。您是否建议使用开关?还是更优雅的东西?

提前致谢!


问题答案:

至少对于J2SE 1.5转发,您可以为枚举赋予额外的属性。这意味着您可以用类似如下的内容替换整个if-else字符串

var2 = var1.getNextInSequence();

现在,在这种情况下,您似乎希望该属性成为对另一个枚举的引用,这会增加一些折痕,例如,在初始化它们时无法转发参考枚举,但是可能有一个可行的解决方案这条路。

当属性不是相同枚举的其他实例时,这种方法将起作用:

public enum Animal {
    FOX(4),
    CHICKEN(2),
    WORM(0);

    private int countLegs;

    Animal(int n) {
        countLegs = n;
    }

    public int getLegCount() {
        return countLegs;
    }
    // .. more getters setters etc
}

但是,当枚举是自引用的时,您必须注意实例的声明顺序。即,这将有一些问题:

public enum Animal {
    FOX(4, CHICKEN),    // 'CHICKEN' doesn't exist yet
    WORM(0, null),
    CHICKEN(2, WORM);    // this actually will compile

    private int countLegs;
    private Animal eatsWhat;

    Animal(int n, Animal dinner) {
        countLegs = n;
        eatsWhat = dinner;
    }

    public int getLegCount() {
        return countLegs;
    }
    // .. getters, setters, etc
}

因此,如果需要枚举之间的循环引用集,则必须进行其他操作,但是如果没有,则 可以 使用此技术,尽管您可能必须对枚举实例进行排序才能使其正常工作。



 类似资料:
  • 我如何重构所有这些看起来重复和太长的代码,有没有办法让它变短? 我试过使用Switch语句,但在这种情况下不起作用。 “typeofdata”变量包含一个用于匹配相关行的字符串。

  • Go语言的条件判断结构也很简单。 package main import "fmt" func main() { // 基本的例子 if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") } // 只有if条件的情况 if 8%4

  • 我有一个if语句,里面有很多条件,但是条件是完全不同的。看起来真的很笨重。我不确定是否有办法做这件事。

  • 我目前正在了解React Native中的if-else if-else语句的语法。下面是我理解的一个简单的if-else条件: 但是,当添加另一个条件来生成if-else if-else语句时,我遇到了问题。 如果有人能指出我的缺点,我将不胜感激!

  • 问题内容: 我有一个像下面的数据框。 我需要基于多个条件派生Flag列。 我需要比较触发器1 -3列的得分和身高列。 标志栏: 如果得分大于等于触发器1并且高度小于8,则红色- 如果得分大于等于触发器2并且高度小于8,则黄色- 如果得分大于等于触发器3并且高度小于8,则橙色- 如果高度大于8,则留空 如果在pandas数据框中有其他条件并导出列,该如何写? 预期产量 对于我原始问题中的其他列Tex

  • 在Rust中,在“if-else”构造中,创建或将多个对象之一指定给变量的首选方式是什么?由于范围限制,似乎必须在if-else之外创建变量。我想到的两种方式都不太好。以字符串为例,这里有一种方法,但它会生成一个关于未使用的赋值的警告: 另一种选择是: 它更短,并且不生成警告,但是意味着被分配了两次,并且意味着运行,但是如果为真,则会被浪费。如果不是简单的字符串创建,这些都是昂贵的操作(可能有副作