java 的重叠 ifs 重构

overlapping ifs refactoring of java

我正在使用 java8。 我从示例中制作了以下代码。 我想重构这个,但我不知道怎么做。 有什么好的想法请告诉我。

添加说明: 编码有一些错误,所以我更正了。


String returnStr = "";
if(a != "" && b != "" && c != ""){
    returnStr = "1";
}else{
    if(a != "" && b != ""){
        returnStr = "2";
    }else if(a != "" && c != ""){
        returnStr = "3";
    }else if(b != "" && c != ""){
        returnStr = "4";
    }else{
        if(a != ""){
            returnStr = "5";
        }else if(b != ""){
            returnStr = "6";
        }else if(c != ""){
            returnStr = "7";
        }else{
            returnStr = "8";
        }
    }
}

return returnStr;

从“空”检查有效隐含的 3 位构造一个 int

int i = (a != "" ? 4 : 0) | (b != "" ? 2 : 0) | (c != "" ? 1 : 0);

(是的,您应该使用 equalsisEmpty(),而不是 !=。这不是重点。

这给出了 0 到 7 范围内的数字,包括端值。

构造一个8元素的列表或数组,其中数字是你想要的值return。

然后,使用上面的 i 到 select 来自 list/array 的元素:

return list.get(i);  // or array[i]

你不需要所有这些else,你可以像这样让它更简洁明了:

if(a != "" && b != "" && c != "") return 1;
if(a != "" && b != "") return 2;
if(a != "" && c != "") return 3;
if(b != "" && c != "") return 4;
if(a != "") return 5;
if(b != "") return 6;
if(c != "") return 7;
return 8;