用于简化条件算法的 Intellij 检查规则

Intellij inspection rule to simplify conditional algorithms

我们有一些简短的方法可以将一些值从一个域转换到另一个域,它通常有一个巨大的 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 块,而不是将值分配给最终将 returned 的变量,我将 return 放入条件本身,生成以下代码:

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 上有一些规则建议这样做吗?

您可以使用“移动 return 更接近值的计算..” quick-fix of 'return' separated from the result computation inspection(Java | Code style issues | 'return' separated from the result computation),然后应用“remove redundant 'else'" quick-fixes 的 冗余 'else' 检查(Java | 控制流问题 | 冗余 'else')。