如何降低这种方法的复杂性?

How to reduce complexity of this method?

PS: CONST*-* =>常量

我需要使用 Java 7 语法降低此方法的复杂性。

public void myMethod(){
    if(condition1){
       menu.addItem(CONSTA-1);
    }
    if(condition2){
        menu.addItem(CONSTB-1);
    }
    if(condition3){
        menu.addItem(CONSTC-1);
        menu.addItem(CONSTC-2);
    }
    if(condition4){
        menu.addItem(CONSTD-1);
    }
    if(condition5){
        menu.addItem(CONSTE-1);
    }
}

有了 Java 8,你可以考虑使用 List<Pair<Predicate, List<MenuItem>> 东西。

换句话说:当可以将每个条件提取到独立的 Predicate 对象中时,您可以执行以下操作:

for (Pair<Predicate, List<MenuItem> pair : thatList) {
  if (pair.first().test()) {
    pair.second().foreach(menu::addItem);

含义:您迭代所有条件,并且对于第一个匹配项,您检索相应的菜单项并添加它们。关键的部分是想出一个理智的方法来实际让每个 test() 正确的事情。

您可以在 Java7 中做类似的事情(通过自己实现所需的 类)。但在我看来,那是 过度设计 的事情。

Basic rule for refactoring is, method should be small enough to accommodate functionality

因此我们可以像下面这样轻松重构,

public void myMethod(){
  addMenuCondition1(menu);
  addMenuCondition2(menu);
  addMenuCondition3(menu);
  addMenuCondition4(menu);
  addMenuCondition5(menu);
}
public void addMenuCondition1(Menu menu) {
   if(condition1){
       menu.addItem(CONSTA-1);
    }
}
public void addMenuCondition2(Menu menu) {
 if(condition2){
        menu.addItem(CONSTB-1);
    }
}
public void addMenuCondition3(Menu menu) {
 if(condition3){
        menu.addItem(CONSTC-1);
        menu.addItem(CONSTC-2);
    }
}
public void addMenuCondition4(Menu menu) {
  if(condition4){
        menu.addItem(CONSTD-1);
    }
}
public void addMenuCondition5(Menu menu) {
   if(condition5){
        menu.addItem(CONSTE-1);
    }
}