【问题标题】:java:S1067 - Reduce the number of conditional operators (5) used in the expression (maximum allowed 3)java:S1067 - 减少表达式中使用的条件运算符 (5) 的数量(最多允许 3 个)
【发布时间】:2021-12-10 00:51:34
【问题描述】:

如何减少条件运算符的数量? 声纳显示主要问题,例如减少表达式中使用的条件运算符 (5) 的数量(最多允许 3 个),但所有条件都必须保留在此块中:

private String processfromOrigin(Object value) {
    if ((value instanceof A) || (value instanceof B)
            || (value instanceof C) || (value instanceof D)
            || (value instanceof E)
            || (value instanceof F)) {
        return ((baseDto) processo).getProcess();
    } else if (value instanceof G) {
        return ((G) value ).getProcess();
    } else if (value instanceof H) {
        return ((H) value ).getProcess();
    } else {            
        return (String) value ;
    }
}

【问题讨论】:

  • 声纳只是给你建议。在这种情况下,您可以忽略它。这可能是一种气味,应该有一个 A...F 都应该实现的通用接口。
  • 奇怪的是,您检查了value,但随后又转换了processo

标签: java sonarqube


【解决方案1】:

您可以使用如下代码来简化 if 块中的第一个条件:

import static java.util.Stream.of;
boolean checkABCDEF = of(A.class, B.class, C.class, D.class, E.class, F.class).
                      anyMatch(aClass -> aClass.isInstance(value))

的,你可以将它封装在一个本地方法中:

    private boolean isABCDEF(Object x) {
        return Stream.of(A.class, B.class, C.class, D.class, E.class, F.class).
                      anyMatch(aClass -> aClass.isInstance(x));
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多