这是真正的警告还是过度敏感的

这是真正的警告还是过度敏感的

我有这个方法:

private Boolean compare(String property, String relationOperator,
        String operand) {
    Integer propertyValue = NumberUtils.toInt(property);
    Integer operandValue = NumberUtils.toInt(operand);

    switch (relationOperator)
    {
        case "<":  return propertyValue.compareTo(operandValue) < 0;
        case "<=": return propertyValue.compareTo(operandValue) <= 0;
/*WARN*/case "=":  return propertyValue.compareTo(operandValue) == 0;
        case ">=": return propertyValue.compareTo(operandValue) >= 0;
        case ">":  return propertyValue.compareTo(operandValue) > 0;
        case "!=": return propertyValue.compareTo(operandValue) != 0;
    }
    return Boolean.FALSE;
}

对于标记为 /*WARN*/ 的行,FindBugs 3.0.0 告诉我:



我认为代码没问题,因为我比较的是 int s 而不是 Integer s,所以我可以在这一行安全地使用 @SuppressWarnings 吗?

最佳答案

你的代码很可怕,因为它使用包装类,并且在它可以使用原语时进行比较。此外,您的代码过于聪明。你应该尝试 write dumb code 。就像是,

private boolean compare(String property, String operator, String operand) {
    int pv = Integer.parseInt(property);
    int ov = Integer.parseInt(operand);
    if (operator.equals("<")) {
        return pv < ov;
    } else if (operator.equals("<=")) {
        return pv <= ov;
    } else if (operator.equals(">")) {
        return pv > ov;
    } else if (operator.equals(">=")) {
        return pv >= ov;
    } else if (operator.equals("!=")) {
        return pv != ov;
    } else if (operator.equals("=") || operator.equals("==")) {
        return pv == ov;
    }
    return false;
}

关于java - 这是真正的警告还是过度敏感的 Lint ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26457921/

10-11 22:27