Intellij检查规则可简化条件算法

时间:2019-05-15 16:15:50

标签: java intellij-idea sonarqube

我们有一些简短的方法,可以将某些值从一个域转换为另一个域,例如,通常有一个巨大的switch块或几个ifs

private DomainB translateSomething(final DomainA data) {
    DomainB result = null;
    if (data != null) {
            if (CONSTANT_A_VALUE_X.equals(data)) {
                result = CONSTANT_B_VALUE_X;
            } else if (CONSTANT_A_VALUE_Y.equals(data)) {
                result = CONSTANT_B_VALUE_Y;
            } else if (CONSTANT_A_VALUE_Z.equals(data)) {
                result = CONSTANT_B_VALUE_Z;
            } else {
                result = CONSTANT_B_VALUE_W;
            }
    }
    return result;
}

它可以是switch而不是if,或者每个结果可以有多个条件,或者甚至可以在方法参数上接收多个域以帮助确定一个结果,这就是为什么它不能成为地图的原因。

当我看到这种情况时,我会在第一种情况下施加短路,并删除所有else块,而不是将值分配给最后要返回的变量,而是将返回值放在条件本身,则产生以下代码:

private DomainB translateSomething(final DomainA data) {
    if (data == null) {
        return null;
    }
    if (CONSTANT_A_VALUE_X.equals(data)) {
        return CONSTANT_B_VALUE_X;
    }
    if (CONSTANT_A_VALUE_Y.equals(data)) {
        return CONSTANT_B_VALUE_Y;
    }
    if (CONSTANT_A_VALUE_Z.equals(data)) {
        return CONSTANT_B_VALUE_Z;
    }
    return CONSTANT_B_VALUE_W;
}

我累了好几次,我知道IntelliJ在检查规则方面有很大帮助,IntelliJ上有一些规则可以建议这样做吗?

1 个答案:

答案 0 :(得分:0)

您可以使用“ 将返回值移动得更接近值的计算。”将'return'的快速修复与结果计算分开检查(Java |代码样式问题|将“返回”与结果计算分开),然后应用“ 删除冗余的'else'”快速修复的冗余的'else'检查(Java |控制流问题) |多余的“ else”)。

enter image description here