如何重构以下代码

时间:2012-05-03 09:43:14

标签: java

我有一个想要重构的方法,以及一些虚拟代码如下:

if(deletedInfo.isEmpty() && addedInfo.isEmpty()) {
    // some logic codes
} else if (!deletedInfo.isEmpty() && addedInfo.isEmpty()) {
    // some logic codes
} else if (deletedInfo.isEmpty() && !addedInfo.isEmpty()) {
    // some logic codes
} else if(!deletedInfo.isEmpty() && !addedInfo.isEmpty()) {
    // some logic codes
}

是否有适当的模式或某种算法来重构这些代码?

感谢。

3 个答案:

答案 0 :(得分:4)

if (deletedInfo.isEmpty()) {

    if (addedInfo.isEmpty()) {
        // some logic codes
    } else {
        // some logic codes
    }

} else {

    if (addedInfo.isEmpty()) {
        // some logic codes
    } else {
        // some logic codes
    }

}

答案 1 :(得分:2)

您可以使用以下代码进行重构:

int val = 0;
if (deletedInfo.isEmpty()) val |= 0x1;
if (addedInfo.isEmpty()) val |= 0x2;

switch (val) {
    case 0: // some logic codes
    case 1: // some logic codes
    case 2: // some logic codes
    case 3: // some logic codes
}

答案 2 :(得分:0)

有几种方法可以做到。这是一个:

if (a) {
  if (b) {
    // do J
  } else {
    // do K
  }
} else {
  if (b) {
    // do L
  } else {
    // do M
  }
}

您可能更喜欢类似于真值表的内容,特别是如果您要组合两个以上的测试:

int switcher = 0;
if (a) switcher|=1;
if (b) switcher|=2;
switch(switcher) {
  case 0:
    // do J
    break;
  case 1:
    // do K
    break;
  case 2:
    // do L
    break;
  case 3:
    // do M
    break;
}

我认为没有一种自动“正确”的方式 - 你必须选择最适合你情况的东西。